我在 PHPMyAdmin 上遇到这个错误
#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 3
[编辑] 对不起,我之前没有放完整的东西,我已经有了 BEGIN 和 END,看。
CREATE TRIGGER `accounts_insert` BEFORE INSERT ON `accounts`
FOR EACH ROW BEGIN
SET new.RegiDate = now();
SET new.UpdateDate = now();
END;
这是一行^^
最佳答案
如果你的触发器只有一条指令,你不需要begin
关键字:
create trigger `accounts_insert` before insert on `accounts`
for each row
set new.RegiDate = now();
如果您的触发器有多个指令,那么您需要:
- 更改默认分隔符
- 将触发指令包含在
begin...end
block 中 - 恢复默认分隔符
例子:
delimiter $$
create trigger `accounts_insert_2` before insert on `accounts`
for each row
begin
set new.RegiDate = now();
set @newRows = coalesce(@newRows, 0) + 1; -- Just a dummy example
end; &&
delimiter ;
为什么 delimiter $$
和 delimiter ;
很重要?
当您编写查询时,MySQL 假定它在找到第一个标准“指令终止符”(;
) 的地方结束。由于您的触发器有多个指令,并且每条指令都必须以 ;
结尾,因此 MySQL 假定触发器定义已结束,并且(当然)无法执行它。那么,有什么办法呢?简单地临时重新定义标准指令终止符:
delimiter $$
现在,每条指令必须以 $$
结尾才能执行。定义你的触发器,当你想结束定义时,使用你新的临时指令终止符$$
,然后重新定义终止符为正常的;
:
delimiter ;
每次定义多指令触发器或存储过程或函数时,必须完成此操作。
关于mysql - #1064 - 您的 SQL 语法有误; , SAMP MYSQL 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21947476/