2013-07-01 72 views
0

所以我試圖創建觸發器,它只會在表中的特定列被更新時纔會執行。有問題的表是跟蹤有問題的列是track.track_hits。我想要做的是如果該值發生變化,那麼它會將一個值插入名爲play_log的表中。插入應該是來自軌道的track_id和時間戳。觸發器中的MySQL IF語句問題

我到目前爲止所做的代碼在下面,但它不起作用,它如何解決?

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

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,我選擇了分隔符。

+0

在Oracle中,您確實需要冒號(:) – Randy

+0

這很好,謝謝很多@jtseng –