2017-06-29 56 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