【问题标题】:MySQL on update current_timestamp not workingMySQL 更新 current_timestamp 不起作用
【发布时间】:2012-09-03 14:42:07
【问题描述】:

我有一个 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

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

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

【问题讨论】:

    标签: mysql


    【解决方案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;
    

    将在表UpdatesHere 中使用id 1 更新行中的列time


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

    【讨论】:

    • 嘿,我想要一个解决方案,updated at 的时间戳保留在同一个表中,并且时间戳在 MySQL 中自动更新。
    • 我想进一步解释这个问题。由于该列设置为ON UPDATE CURRENT_TIMESTAMP,因此每次更改行中的任何字段时,MySQL 都应该自动更新updated_at 字段。如果我使用 MySQL 语句或通过一些 PHP 代码直接更改表中的字段值,就会发生这种情况。问题是,每当其他表执行的触发器更改字段中的值时,updated_at 字段不会自动更改。
    猜你喜欢
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-30
    • 2018-01-26
    相关资源
    最近更新 更多