2017-06-29 13 views
0

據phpMyAdmin的,我有一個語法錯誤,在這個觸發器:錯誤MySQL的句法觸發

CREATE TRIGGER insert_device 
AFTER INSERT ON table_e 
FOR EACH ROW 

BEGIN 

DECLARE m_id_a INTEGER; 
DECLARE m_id_d INTEGER; 
m_id_d := 0; 

SELECT id_a INTO m_id_a FROM table_ua WHERE ua_eui = NEW.eui LIMIT 1; 

SELECT id_d INTO m_id_d FROM table_d WHERE d_idapp = m_id_a ORDER BY id asc LIMIT 1; 
IF (m_id_d == 0) THEN 
    INSERT INTO table_d (d_addr, d_eui, d_apps, d_nwks, d_idapp) 
    VALUE (NEW.addr, NEW.eui, NEW.apps, NEW.nwks, m_id_a); 
ELSE 
    UPDATE TABLE table_d 
    SET 
     d_addr = NEW.addr, 
     d_eui = NEW.eui, 
     d_apps = NEW.apps, 
     d_nwks = NEW.nwks 
    WHERE id_d = m_id_d; 
END IF; 

END 

的錯誤是:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':= 0; 

什麼錯誤?我不明白我在做什麼錯誤..

謝謝。

回答

1

,我們在您觸發幾個語法錯誤:

  1. declare一個變量,你應該set調用它;
  2. IF表達式不能使用==,只有一個相等就可以;
  3. update語法只需要指定表名稱,如UPDATE table_d SET ...

所以,請嘗試以下觸發:

delimiter $$ 
CREATE TRIGGER insert_device 
AFTER INSERT ON table_e 
FOR EACH ROW 

BEGIN 

DECLARE m_id_a INTEGER; 
DECLARE m_id_d INTEGER; 
set m_id_d = 0; 
SELECT id_a INTO m_id_a FROM table_ua WHERE ua_eui = NEW.eui LIMIT 1; 

SELECT id_d INTO m_id_d FROM table_d WHERE d_idapp = m_id_a ORDER BY id asc LIMIT 1; 
IF (m_id_d = 0) THEN 
    INSERT INTO table_d (d_addr, d_eui, d_apps, d_nwks, d_idapp) 
    VALUE (NEW.addr, NEW.eui, NEW.apps, NEW.nwks, m_id_a); 
ELSE 
    UPDATE table_d 
    SET 
     d_addr = NEW.addr, 
     d_eui = NEW.eui, 
     d_apps = NEW.apps, 
     d_nwks = NEW.nwks 
    WHERE id_d = m_id_d; 
END IF; 

END 
$$ 
+0

非常感謝你,它的工作原理! – iAmoric