数据库的 timestamp 类型有两个属性,CURRENT_TIMESTAMP 和 ON UPDATE CURRENT_TIMESTAMP,今天工作的时候正好遇到了这个问题,想要实现更新数据时的时间自动更新。

建表语句

CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `data` varchar(45) DEFAULT NULL,
  `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `create_times` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8

插入3条记录

insert into test(data) values("啊啊");
insert into test(data) values("哈哈");
insert into test(data) values("嗯嗯");

得到

可见创建时自动带上了当前时间,当执行更新语句时

update test set data = "呃呃呃" where id = 7;

加了 ON UPDATE CURRENT_TIMESTAMP 的 create_times 值发生了变化,而create_time的值没有发生变化,这就是ON UPDATE CURRENT_TIMESTAMP的作用,会自动把时间更新为最新操作的时间

那么如果更新的值没有变化,时间还会更新吗?再次执行

update test set data = "呃呃呃" where id = 7;

发现时间并没有变化,所以得出只有更新的值发生了变化,加了 ON UPDATE CURRENT_TIMESTAMP 的字段时间才会随着一起变化