【问题标题】:MySQL automatic update for specific column instead of whole recordMySQL自动更新特定列而不是整个记录
【发布时间】:2023-04-04 21:56:02
【问题描述】:

我有一个表APPLEVARIETY。 它有以下列:

  • 身份证
  • 家庭
  • 颜色
  • 说明(文本)
  • description_last_update_time (TIMESTAMP)

对于后一列,我想使用“ON UPDATE CURRENT_TIMESTAMP”。但是,如果至少有一个其他列被更新(id、family、color),这将导致时间戳被更新。

相反,如果仅更新描述列,我想指定 description_last_update_time 将获得 CURRENT_TIMESTAMP。它应该忽略其余列的更新。

我已经查看了 MySQL 手册、关于 stackoverflow 的其他问题,当然还广泛使用了 google,但一无所获。

换句话说:有什么方法可以通过 ON UPDATE 来指定某个列?有没有可能,还是我走错了方向?

【问题讨论】:

    标签: mysql timestamp auto-update


    【解决方案1】:

    不,使用ON UPDATE CURRENT_TIMESTAMP 是不可能的,这将在更新任何列时得到更新。 但是,您可以使用触发器实现相同的目的。为此,您首先需要从表定义中删除 ON UPDATE CURRENT_TIMESTAMP。 触发器看起来像

    delimiter //
    
    create trigger APPLEVARIETY_update before update on APPLEVARIETY
    for each row 
    begin
      if new.description <> old.description then
        set new.description_last_update_time = now();
      end if;
    end;//
    
    delimiter ;
    

    【讨论】:

    • 谢谢,这行得通。唯一剩下的问题是,在描述字段的第一次更新时,description_last_update_time 没有更新为 now()。仅从 第二次 开始,我更新 description_last_update_time 已更改的描述字段。
    • 好吧,我想当您第一次将记录添加到表中时?在这种情况下,我建议在插入命令中也添加时间戳值。
    • 否,记录已添加到表中。然后我第一次使用 UPDATE 它并且 description_last_update_time 没有改变,它仍然是 0000-00-00 00:00:00。也许我对默认值做错了什么?
    猜你喜欢
    • 1970-01-01
    • 2020-07-19
    • 2021-09-08
    • 2022-12-30
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 2016-05-07
    • 2014-01-23
    相关资源
    最近更新 更多