MySQL更新current_timestamp无法正常工作

时间:2012-09-03 14:42:07

标签: mysql

我有一个带有updated_at default current_timestamp on update current_timestamp列的mysql表。

每当我使用查询(直接或通过php代码)更新行时,updated_at的值都会更新,但只要通过来自其他某个表的触发器更新行,updated_at值就不会更改。我希望这也会发生。

有什么建议吗?这个问题的原因是什么?

table1的相关行

Field             | Type             | Null | Key | Default           | Extra                       
updated_at        | timestamp        | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP

只要table2中的某个coloumn2更新,table2中的触发器就会更新table1中的一些coloumns。注意:触发器中的时间戳未更新。我希望MySQL能够自动完成。

此外,我正在使用主从复制,问题出在主设备和从设备上。主从复制的日志记录格式是语句日志记录。

1 个答案:

答案 0 :(得分:1)

以下是使用触发器更新时间戳的简单示例:

首先你应该有两个(简单的)表:

表名为 TriggerTable

#Field     #Type         #Function
 1  id      int(11)       AUTO_INCREMENT 
 2  data    varchar(52)

表名为 UpdatesHere

#Field     #Type         #Function
 1  id      int(11)       AUTO_INCREMENT 
 2  time    timestamp     NOW(), on update NOW()

然后是TRIGGER

添加在每次TriggerTable次更新时执行的触发器:

CREATE TRIGGER `TriggerTableOnUpdate` 
    AFTER UPDATE ON `TriggerTable` 
    FOR EACH ROW 
    BEGIN 
        UPDATE `UpdatesHere` SET `time`=NOW() WHERE `id`=NEW.id; 
    END

之后如果您在TriggerTable中进行更新,它也应该更新UpdatesTable。它只是更新具有相同ID的列。

例如:

UPDATE  `TriggerTable` SET `data`='Hello World' WHERE `id`=1;

会更新timeid 1行中的UpdatesHere列。


注意: 在定义触发器时,使用DELIMITER [ delimiter ]更改分隔符。