我想通过触发器更新当前行更新后的两列。 endtime和starttime是datetime类型。 duration是整数,它代表秒数。 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;
答案 0 :(得分:1)
您应该设置分隔符,以便触发器内的分号不会被解释为触发器的结束:
c1
答案 1 :(得分:1)
您需要更改分隔符。否则,DB将在第一个;
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
来引用当前记录进行修改。