事情是这样的,我有一个程序需要根据表的更新时间字段(updatetime)去处理数据。
不过在更新表数据的时候偶尔会忘记更新updatetime字段。
于是我的第一想法是增加一个触发器来更新时间:当更新表中其他字段的时候触发器会自动更新udpdatetime字段;
触发器如下:
-- 先删除旧触发器(避免重复报错) 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)
