mysql - Mysql触发器,语法错误

标签 mysql sql triggers syntax-error

我想在触发器更新当前行后更新两列。 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/

相关文章:

mysql - mysql中的触发器不允许某些列对重复值

MYSQL 根访问被拒绝(密码重置不起作用)

android - 服务器托管仅允许授权 IP 访问数据库

python - 使用 '%s' 参数化的 SQL 查询是什么样的?

php - PDO查询返回0

javascript - Google Apps 脚本库和脚本分发

mysql - 如果表 B(colB1, colB2) 具有表 A 的匹配值,如何用 B2 的数据更新表 A 的列 A2 (colA1, colA2)?

mysql - 组合两个查询并使用 HAVING

mysql - 如何以我想要的格式获取表结果 MYSQL

mysql - 使用触发器取消删除