MySQL如何设置自动更新时间戳字段,实现-OnUpdateCurrentTimestamp功能?
- 内容介绍
- 文章标签
- 相关推荐
本文共计828个文字,预计阅读时间需要4分钟。
想要让某个字段在记录更新时自动刷新为当前时间,可以使用`ON UPDATE CURRENT_TIMESTAMP。但仅添加这句还不够——该字段类型必须是`TIMESTAMP`或`DATETIME`,且不能是主键或唯一键的组合部分(除非明确允许`NULL`或设置默认值)。
常见错误:给 DATETIME 字段加 ON UPDATE CURRENT_TIMESTAMP 却没指定 DEFAULT CURRENT_TIMESTAMP,MySQL 5.6.5+ 虽支持,但低版本会报错;更稳妥的做法是两者都显式声明:
CREATE TABLE example ( id INT PRIMARY KEY, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );
为什么 updated_at 没有随 UPDATE 变化?
最常踩的坑是:UPDATE 语句里显式赋了值,哪怕和原值一样,也会跳过 ON UPDATE CURRENT_TIMESTAMP。例如:
UPDATE example SET name='foo', updated_at=updated_at WHERE id=1;
这行会让 updated_at 停在原地,因为 MySQL 认为你“主动控制”了它。
本文共计828个文字,预计阅读时间需要4分钟。
想要让某个字段在记录更新时自动刷新为当前时间,可以使用`ON UPDATE CURRENT_TIMESTAMP。但仅添加这句还不够——该字段类型必须是`TIMESTAMP`或`DATETIME`,且不能是主键或唯一键的组合部分(除非明确允许`NULL`或设置默认值)。
常见错误:给 DATETIME 字段加 ON UPDATE CURRENT_TIMESTAMP 却没指定 DEFAULT CURRENT_TIMESTAMP,MySQL 5.6.5+ 虽支持,但低版本会报错;更稳妥的做法是两者都显式声明:
CREATE TABLE example ( id INT PRIMARY KEY, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );
为什么 updated_at 没有随 UPDATE 变化?
最常踩的坑是:UPDATE 语句里显式赋了值,哪怕和原值一样,也会跳过 ON UPDATE CURRENT_TIMESTAMP。例如:
UPDATE example SET name='foo', updated_at=updated_at WHERE id=1;
这行会让 updated_at 停在原地,因为 MySQL 认为你“主动控制”了它。

