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

UPDATE语句中能否将activated_at设为updated_at的ON UPDATE新值?

UPDATE语句中activated_at会取updated_at的新值还是旧值?

我已经把updated_at列设置为ON UPDATE CURRENT_TIMESTAMP,现在想在active列从False改为True时,让activated_at列和updated_at列的值保持一致。请问执行下面这条UPDATE语句时,activated_at会使用updated_at的ON UPDATE新值、旧值,还是行为未定义?

UPDATE mytable
SET active=TRUE, activated_at=mytable.updated_at
WHERE active=FALSE;

结论:会使用updated_at的旧值

原因很直接:在UPDATE语句的SET子句里,直接引用表的列名时,取的是该行更新前的原始值。而updated_at的ON UPDATE CURRENT_TIMESTAMP触发的更新,是在整个UPDATE语句的SET子句赋值逻辑执行完毕之后才会生效的,所以此时activated_at拿到的还是更新前的updated_at值,没法同步到新的时间戳。

如果想让activated_at和updated_at的新值一致,有两种靠谱的做法:

  • 直接把activated_at设为CURRENT_TIMESTAMP,和updated_at用同一个时间源:
    UPDATE mytable
    SET active=TRUE, activated_at=CURRENT_TIMESTAMP
    WHERE active=FALSE;
    
  • 用触发器实现:创建一个BEFORE UPDATE触发器,当active从False变为True时,自动把activated_at设为CURRENT_TIMESTAMP(和updated_at的更新逻辑对齐)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 14:43:11