触发器中的MySQL IF语句问题

时间:2013-07-01 18:43:25

标签: mysql sql triggers

所以我试图创建只在表中的特定列更新时才执行的触发器。有问题的表是跟踪有问题的列是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;

1 个答案:

答案 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,因此我选择了分隔符。