MySQL无字段变更时强制更新date_updated的相关疑问
MySQL自动更新时间戳的疑问解答
你给表中date_updated字段设置的DDL如下:
date_updated TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL,
遇到的问题是:当更新语句没改任何字段值时,这个时间戳不会自动更新。根据MySQL文档的说明:
即使其他字段未变更,若要更新自动更新字段,需显式将其设置为应有的值(例如设置为CURRENT_TIMESTAMP)。
针对你的疑问,解答如下:
会不会触发双重更新?
不会。MySQL的处理逻辑是:当你在UPDATE语句里显式指定了date_updated = CURRENT_TIMESTAMP时,DDL中ON UPDATE CURRENT_TIMESTAMP的自动更新规则就不会再触发,不存在两次更新的情况。
保留两种设置是否正确?还是移除ON UPDATE?
两种方案都能满足需求,看你的实际场景:
- 保留
ON UPDATE:更省心。平时更新其他字段时,时间戳会自动更新;需要强制更新(哪怕没改其他字段)时,再手动加SET date_updated = CURRENT_TIMESTAMP即可,兼顾自动和手动的需求。 - 移除
ON UPDATE:适合要求所有更新都必须手动控制时间戳的场景,但这样每次更新都要手动写这个字段,容易遗漏,增加代码量。
内容的提问来源于stack exchange,提问作者v1shnu
相关产品推荐
相关产品推荐

