2012-11-26 151 views
2

我有一個簡單的DB表,其中包含文章數據庫的幾個字段,它是一個TimeStamp,其中包含對文章進行的上次更新的時間。mysql:如何在字段更新時自動更新時間戳

我用「ON UPDATE CURRENT_TIMESTAMP」

問題是,我想只有在此記錄的某些字段已經改變,不是所有的更新。

即對於每篇文章,我有一個字段給出了訪問者閱讀文章的時間。每個Web訪問後不能更新中...只有當我更改標題,作者,等等

理想的情況下用一個漂亮的mysql命令......


我已經編寫了以下內容:

CREATE TRIGGER `actu_lastupdate_date` BEFORE UPDATE ON `actuality` 
FOR EACH ROW BEGIN 
    if NEW.title <> OLD.title OR NEW.chapeau = OLD.chapeau OR NEW.content = OLD.content 
    then 
     SET NEW.LastUpdate_date = current_timestamp; 
    end if; 
END 

看來即使另一個記錄字段正在改變,時間戳也會被更新。應該有什麼地方不好。 我會考慮它

+0

你可以嘗試使用[觸發器](http://dev.mysql.com/doc/refman/ 5.0/en/create-trigger.html)... – Zweer

+0

謝謝。現在試圖瞭解它是如何工作的 – ThomasP

回答

2

你可以寫一個觸發器來添加時間戳的更新

delimiter | 
CREATE TRIGGER actu_lastupdate_date AFTER UPDATE on actuality 
FOR EACH ROW 
BEGIN 
    if (NEW.title <> OLD.title 
     OR NEW.chapeau <> OLD.chapeau 
     OR NEW.content <> OLD.content) 
     AND (NEW.other_column = OLD.other_column 
     OR NEW.other_column2 = OLD.other_column2) 
    then 
     SET NEW.LastUpdate_date = current_timestamp; 
    end if; 
END 
| 
delimiter ; 
+0

如果我理解正確,那麼每次有更新的行IF col1或col2或col3不更改時,這將在表your_table的字段timestamp_column上設置新的時間戳記?因爲我只需要更新時間戳,如果一些領域已經改變,我需要改變,如果然後條件:如果(NEW.col1 <> OLD.col1)或(NEW.col2 <> OLD.col2)然後設置新.timestamp_column = current_timestamp; – ThomasP

+0

是的。這是計劃:) –

+0

@ThomasP:將'AFTER UPDATE'更改爲'BEFORE UPDATE' –