You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何更新last_exported_date时忽略timestamp类型的date_last_update列?

解决方法:仅更新last_exported_date而不触发date_last_update自动更新

当然可以做到!问题的根源在于你的date_last_update字段设置了on update CURRENT_TIMESTAMP——MySQL的这个特性会在**任何行更新操作(不管修改哪个字段)**时,自动把该字段设为当前时间,除非你显式指定它的值。

下面是两种最直接的解决方案:

方法1:在UPDATE语句中显式保留date_last_update的当前值

这是最简单的方式,在更新last_exported_date的同时,明确将date_last_update设为它当前的取值。这样MySQL就不会触发自动更新逻辑了:

UPDATE user
SET last_exported_date = CURRENT_TIMESTAMP(),
    date_last_update = date_last_update  -- 显式指定原值,跳过自动更新
WHERE user_id = {你的用户ID};

原理说明

当你在UPDATE语句中为date_last_update指定了具体值(哪怕是它自己当前的值),MySQL就会忽略on update CURRENT_TIMESTAMP的自动触发规则,直接使用你指定的值。

方法2:使用INSERT ... ON DUPLICATE KEY UPDATE(适合主键/唯一键场景)

如果你的表有主键或唯一键(比如user_id),可以用这种方式来更新,本质也是显式传递date_last_update的当前值:

INSERT INTO user (user_id, last_exported_date, date_last_update)
VALUES ({你的用户ID}, CURRENT_TIMESTAMP(), (SELECT date_last_update FROM user WHERE user_id = {你的用户ID}))
ON DUPLICATE KEY UPDATE
    last_exported_date = VALUES(last_exported_date),
    date_last_update = VALUES(date_last_update);

注意事项

  • 确保你的查询条件(WHERE子句)精准,避免误更新其他行。
  • 如果你的MySQL版本是5.6及以上,CURRENT_TIMESTAMP()同时适用于timestamp和datetime类型,无需额外转换。

内容的提问来源于stack exchange,提问作者user1926138

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:53:57