使用InnoDB在MySQL 5.5.9上运行。MySQL触发语法错误
我创建了以下触发:
CREATE TRIGGER TRIGGER_Products_Insert
AFTER INSERT ON Products
FOR EACH ROW
BEGIN
UPDATE Products
SET current = 0
WHERE id = new.id
AND current = 1
AND autonumber <> new.autonumber
END;
MySQLWorkbench显示在最后一行语法错误,并执行,这将引发以下错误
错误代码:1064你有一个错误你的SQL语法;请检查与您的MySQL服务器版本对应的手册,以便在第11行'END'附近使用正确的语法。
我的错误在哪里?
这个工作,但我不知道为什么'DELIMITER'的东西是必要的。 – 2012-02-10 11:31:03
因为'BEGIN ... END'是触发器的“主体”。所以,它必须是当前查询的一部分。 ';'默认情况下是一个分隔符,所以当MySQL到达它时,它认为这是查询的结束并且不能解析它。此外,您必须将定界符放在触发器的“正文”中,因为它会以其他方式失效。所以,为了满足这个要求,我们需要在触发器的“主体”中使用两个不同的定界符,并在查询中使用它自己。对不起,我的英文太难描述这个不太明显的东西了... – Timur 2012-02-10 11:37:53
这里比较好描述:http://dev.mysql.com/doc/refman/5.5/en/begin-end.html(第三段,以“使用多个语句要求客户端能够”开头) – Timur 2012-02-10 11:42:39