Mysql使用on update current_timestamp注意点
最近项目里时间字段(datetime,timestamp)用到了ON UPDATE CURRENT_TIMESTAMP属性,自动更新列时间戳。以下记录一些需注意的地方。
先说结论:
如果你设置了时间随当前时间戳更新( ON UPDATE CURRENT_TIMESTAMP),那么当你更新字段时,只有字段值发生变化了,你的时间字段才会变为UPDATE操作时的时间。
即没有字段更新时,虽然执行了update语句,也执行成功了,时间字段是不会更新的。
比如我们新建一张表:
CREATE TABLE `t_temp` (
`id` int(11) NOT NULL DEFAULT '0',
`username` varchar(255) DEFAULT NULL,
`upd_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '默认取当前时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
然后插入一行数据,然后执行更新。
UPDATE t_temp SET username = 'mm' WHERE id = 1;
会发现时间列不会更新。
同样,在程序中使用了一些框架,比如tk-mybatis,使用更新方法时(比如int updateByPrimaryKeySelective(T record);方法),如果字段没有实际更新,虽然语法执行了,时间字段也不会更新,这点在系统中容易忽视。
参考:
https://blog.csdn.net/xianyu_x/article/details/103578851
https://blog.csdn.net/zgdwxp/article/details/103168552