2012-11-26 114 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' –