关于MySQL更新数据后自动更新updatetime字段的值
事情是这样的,我有一个程序需要根据表的更新时间字段(updatetime)去处理数据。
不过在更新表数据的时候偶尔会忘记更新updatetime字段。
于是我的第一想法是增加一个触发器来更新时间:当更新表中其他字段的时候触发器会自动更新updatetime字段;
触发器如下:
-- 先删除旧触发器(避免重复报错) DROP TRIGGER IF EXISTS trigger_testtable_update; -- 创建触发器 DELIMITER // -- 临时修改语句结束符 CREATE TRIGGER trigger_testtable_update BEFORE UPDATE ON `testtable` -- 在更新前触发 FOR EACH ROW -- 每一行更新都触发 BEGIN -- 把更新时间设为当前时间 SET NEW.updatetime = CURRENT_TIMESTAMP(6); END // DELIMITER ; -- 恢复结束符
不过我发现一个新的方式,不用增加触发器也可以更新updatetime字段;
就是使用MySQL 自带字段属性,比触发器更简单:
-- 直接把字段设为自动更新 ALTER TABLE `testtable` MODIFY COLUMN updatetime timestamp(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) NULL COMMENT '更新时间';
执行这句后,任何更新都会自动刷新时间,不需要触发器。
同时你也可以主动更新updatetime的值,在主动更新updatetime 的值的时候,不会再更新一次。
比如:
UPDATE `testtable` SET updatetime = '2026-05-20 01:25:03.750463' WHERE id=1;
更新后的值为固定的 '2026-05-20 01:25:03.750463'
不会再变成 CURRENT_TIMESTAMP(6)
⚠️需要注意的是:
当执行update操作的时候,如果未改变数据的任何值,不会触发更新updatetime字段;
(比如id = 1的数据A字段值是1,执行语句为update `testtable` set A = 1 where id = 1, updatetime字段不会发生改变 )。
如果你希望update操作不管是否发生数据改变都更新updatetime,建议还是使用触发器。

浙公网安备 33010602011771号