0

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

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

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

table1的相关行

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

每当表 2 中的某个列被更新时,表 2 中的触发器就会更新表 1 中的某些列。注意:时间戳不会在触发器中更新。我希望 MySQL 会自动执行此操作。

另外我正在使用主从复制,问题出在主从复制上。主从复制的日志格式是语句日志。

4

1 回答 1

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()

然后是触发

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;

time将在 table中用id1更新行中的列UpdatesHere


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

于 2012-09-03T17:37:50.287 回答