关于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,建议还是使用触发器。

 
posted @ 2026-05-21 15:49  新*  阅读(43)  评论(0)    收藏  举报