我尝试创建触发器
CREATE TRIGGER `aster_users2` after update ON `aster_users` FOR EACH ROW BEGIN update event set flag=1 where id=1; END;
但得到了下一个错误
ERROR 1064(42000):您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在第6行的“结束”附近使用正确的语法
有建议解决这个问题吗?
尝试从语句中删除分号 .
如果你想保留你的分号,
DELIMITER $$ CREATE TRIGGER `aster_users2` after update ON `aster_users` FOR EACH ROW BEGIN update event set flag=1 where id=1; END$$ DELIMITER ;
你可以:
BEGIN
END
CREATE TRIGGER `aster_users2` after update ON `aster_users` FOR EACH ROW update event set flag=1 where id=1;
要么
CREATE TRIGGER
DELIMITER | CREATE TRIGGER `aster_users2` after update ON `aster_users` FOR EACH ROW BEGIN update event set flag=1 where id=1; END| DELIMITER ;
注意第二个 DELIMITER ,它恢复默认语句分隔符 .
DELIMITER
EDIT - 说明:
通常,您使用 ; 来分隔语句 . 但是当涉及像 CREATE TRIGGER 这样的复合语句,它们使用 BEGIN/END 并允许你在它们的主体中包含多个语句时,解析器需要一种方法来区分整个复合语句之后正文语句与分隔符之间的分隔符 .
;
BEGIN/END
因此,您需要以某种方式避免在复合语句中使用 ; 或告诉解析器复合语句将使用不同的分隔符 . 如果您在 END 之前删除 ; ,也可以实现第一个选项,如@p.campbell建议的那样 .
应该使用分隔符 .
DELIMITER $$ CREATE TRIGGER `aster_users2` AFTER UPDATE ON `aster_users` FOR EACH ROW BEGIN UPDATE event SET flag = 1 WHERE id = 1; END$$ DELIMITER ;
3 回答
尝试从语句中删除分号 .
如果你想保留你的分号,
你可以:
BEGIN
和END
(仅当正文中有单个语句时才可以):要么
CREATE TRIGGER
语句添加DELIMITER说明符:注意第二个
DELIMITER
,它恢复默认语句分隔符 .EDIT - 说明:
通常,您使用
;
来分隔语句 . 但是当涉及像CREATE TRIGGER
这样的复合语句,它们使用BEGIN/END
并允许你在它们的主体中包含多个语句时,解析器需要一种方法来区分整个复合语句之后正文语句与分隔符之间的分隔符 .因此,您需要以某种方式避免在复合语句中使用
;
或告诉解析器复合语句将使用不同的分隔符 . 如果您在END
之前删除;
,也可以实现第一个选项,如@p.campbell建议的那样 .应该使用分隔符 .