Ale*_*ndr 4 mysql database triggers innodb
我尝试创建触发器
CREATE TRIGGER `aster_users2` after
update ON `aster_users` FOR EACH ROW
BEGIN update event set flag=1 where
id=1; END;
Run Code Online (Sandbox Code Playgroud)
但得到了下一个错误
错误1064(42000):您的SQL语法有错误; 检查与MySQL服务器版本对应的手册,以便在第6行的"结束"附近使用正确的语法
有建议解决这个问题吗?
p.c*_*ell 15
尝试从语句中删除分号.
如果你想保留你的分号,
DELIMITER $$
CREATE TRIGGER `aster_users2` after
update ON `aster_users` FOR EACH ROW
BEGIN update event set flag=1 where
id=1;
END$$
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
您可以:
drop BEGIN和END(仅在主体中只有一个语句时才有可能):
CREATE TRIGGER `aster_users2` after
update ON `aster_users` FOR EACH ROW
update event set flag=1 where id=1;
Run Code Online (Sandbox Code Playgroud)
要么
为整个CREATE TRIGGER语句添加DELIMITER说明符:
DELIMITER |
CREATE TRIGGER `aster_users2` after
update ON `aster_users` FOR EACH ROW
BEGIN
update event set flag=1 where id=1;
END|
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
注意第二个DELIMITER,它将恢复默认的语句定界符。
编辑 –说明:
通常,您使用;定界语句。但是,当涉及诸如的复合语句时CREATE TRIGGER,使用BEGIN/END并允许您在其主体中包含多个语句,解析器需要一种方法来区分主体语句与整个复合语句之后的分隔符之间的分隔符。
因此,您需要避免;在复合语句内部使用某种方式,或者告诉解析器该复合语句将使用其他定界符。如果您只是;在@ p.campbell的建议之前END,也可以使用第一个选项。
| 归档时间: |
|
| 查看次数: |
13490 次 |
| 最近记录: |