我的 sql 触发器,语法错误
My sql trigger, syntax error
我想在触发器更新当前行后更新两列。
endtime 和 starttime 是 datetime 类型。持续时间是整数,它将代表秒数。 Sequel 专家告诉我“[查询 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;
您应该设置分隔符,使触发器内的分号不会被解释为触发器的结尾:
-- Set the delimiter
DELIMITER $$
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;
$$
-- Reset the delimiter
DELIMITER ;
您需要更改分隔符。否则 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 ;
您不能在触发器中对同一个 table 进行更新。那将创建一个无限循环。但是可以使用NEW
引用当前记录进行修改。
我想在触发器更新当前行后更新两列。 endtime 和 starttime 是 datetime 类型。持续时间是整数,它将代表秒数。 Sequel 专家告诉我“[查询 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;
您应该设置分隔符,使触发器内的分号不会被解释为触发器的结尾:
-- Set the delimiter
DELIMITER $$
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;
$$
-- Reset the delimiter
DELIMITER ;
您需要更改分隔符。否则 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 ;
您不能在触发器中对同一个 table 进行更新。那将创建一个无限循环。但是可以使用NEW
引用当前记录进行修改。