2017-04-25 97 views
0

我有3个表[表-A,表-B,DATAZ]在我的数据库,当我创建一个TRIGGER如下,#1064 - SQL语法错误,如何解决?

CREATE TRIGGER trigz AFTER INSERT ON table_a 
FOR EACH ROW 
    IF EXISTS (SELECT * FROM table_b WHERE table_b.uid = '123') THEN 
     INSERT INTO dataz 
      VALUES('123'); 

获取ERROR如,

#1064 - 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 '' at line 5 

我不明白是什么我在这里失踪...

我使用WAMP Server 2.4,有人有解决办法吗?


EDIT 1(奈杰尔仁)::

SQL:

CREATE TRIGGER trigz AFTER INSERT ON table_a FOR EACH ROW 
IF EXISTS (SELECT * FROM table_b WHERE table_b.uid = 1) THEN 
    BEGIN 
     INSERT INTO dataz(userid) VALUES('123'); 
    END; 
END IF; 

错误:

#1064 - 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 '' at line 4 
+0

您能否提供表格结构? –

+0

这么多不好看。 。 。没有'DELIMITER','BEGIN','END IF'。 。 。 –

+0

@GordonLinoff当我删除I​​F IF EXISTS(SELECT * FROM table_b WHERE table_b.uid ='123')THEN'这部分,它工作正常 –

回答

0

这是下跌的方式来编辑承认结束的声明。通常它使用a;,但是随着程序的使用;到处都是,你需要改变它。因此,像

DELIMITER $$ 

CREATE TRIGGER trigz AFTER INSERT ON Bin FOR EACH ROW 
begin 
IF EXISTS (SELECT * FROM Bin WHERE binID = 1) THEN 
     INSERT INTO log(text) VALUES('123'); 
END IF; 
end; 
$$ 

编辑: 应该使用:

DELIMITER; 

末定界符重新恢复正常。

+0

ERROR为'#1064 - 您的错误在您的SQL语法;查看与您的MySQL服务器版本对应的手册,在第7行'$$'附近使用正确的语法。 –

+0

我的查询为DELIMITER $$ CREATE TRIGGER trigz AFTER INSERT ON table_a FOR EACH ROW begin IF EXISTS SELECT * FROM table_b WHERE table_b.uid ='123')THEN INSERT INTO dataz(userid)VALUES('123'); END IF; 结束; $$'' –

+0

你是如何运行这个的 - 你必须运行整个事情,包括DELIMITER命令。 –