我有一个带有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能够自动完成。
此外,我正在使用主从复制,问题出在主设备和从设备上。主从复制的日志记录格式是语句日志记录。
答案 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()
添加在每次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
位id
1行中的UpdatesHere
列。
注意: 在定义触发器时,使用DELIMITER [
delimiter
]
更改分隔符。