0

因此,我正在尝试创建仅在更新表中的特定列时才会执行的触发器。有问题的表是 track 有问题的列是 track.track_hits。我想要做的是,如果该值发生变化,那么它将一个值插入一个名为 play_log 的表中。插入应该是来自轨道的 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;
4

1 回答 1

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,所以我选择了分隔符。

于 2013-07-01T20:03:46.107 回答