我的sql触发器,语法错误

时间:2015-10-13 09:12:15

标签: mysql sql triggers syntax-error

我想通过触发器更新当前行更新后的两列。 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;

2 个答案:

答案 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来引用当前记录进行修改。