我想在触发器更新当前行后更新两列。 endtime 和 starttime 是日期时间类型。持续时间是整数,它将代表秒数。 Sequel Pro 告诉我“[查询 1 中的错误]您的 SQL 语法有错误;请检查与您的 MySQL 服务器版本相对应的手册,以了解在第 5 行 '' 附近使用的正确语法 执行停止了!”
CREATE TRIGGER `end_time_update` AFTER UPDATE ON `mytable`
FOR EACH ROW
BEGIN
UPDATE mytable
set endtime = now(), duration = TIMESTAMPDIFF(SECOND, starttime, endtime)
where id = new.id;
END;
最佳答案
您需要更改分隔符。否则数据库将在第一个 ;
delimiter |
CREATE TRIGGER `end_time_update` BEFORE UPDATE ON `mytable`
FOR EACH ROW
BEGIN
if NEW.some_col <> OLD.some_col
then
set NEW.endtime = now();
set NEW.duration = TIMESTAMPDIFF(SECOND, NEW.starttime, NEW.endtime);
end if;
END
|
delimiter ;
您不能在触发器中对同一个表进行更新。这会造成无限循环。但您可以使用NEW
引用当前记录来修改它。
关于mysql - Mysql触发器,语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33098628/