所以我试图创建只在表中的特定列更新时才执行的触发器。有问题的表是跟踪有问题的列是track.track_hits。我想要做的是,如果该值发生更改,则会将值插入名为play_log的表中。插入应该是track的track_id和时间戳。
我到目前为止所做的代码如下,但它不起作用,如何解决?
CREATE TRIGGER pi_play AFTER UPDATE ON track
FOR EACH ROW
BEGIN
if :new.track_hits != :old.track_hits
then
INSERT INTO play_log (track_id,access_time)
VALUES (NEW.track_id, NOW())
end if;
END;
答案 0 :(得分:0)
NEW和OLD在前面不需要:
。此外,在创建触发器时,您可能需要更改分隔符。如果不更改分隔符,则可以提前终止创建触发器语句。
我将如何做到这一点:
delimiter |
create trigger pi_play after update on track
for each row
begin
if new.track_hits != old.track_hits then
insert into play_log(track_id, access_time) values (new.track_id, now());
end if;
end|
delimiter ;
以下是显示其实际效果的小提琴:http://sqlfiddle.com/#!2/3d99d/1请注意,我已将架构窗口中的分隔符更改为|
,而不是默认;
。由于SQL使用JDBC而JDBC不接受命令DELIMITER
,因此我选择了分隔符。