MySQL是目前业界最流行的关系型数据库管理系统,其提供了一些非常有用的功能,比如记录修改时间。在有些场景下,我们需要记录每条记录的修改时间,这样可以方便我们追踪数据变化、排查异常等问题。但是有时候,我们会发现记录修改时间自己会改变,这种情况下我们该如何处理呢?
如下为记录修改时间的简单代码示例:
CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
在这个表中,我们定义了一个update_time字段,该字段会自动记录每条记录的修改时间。但是,我们会发现有时候修改数据的时候,该字段的值会自己改变,这个问题该如何解决呢?
解决方法如下:
我们可以在MySQL的配置文件中加入以下代码:
[mysqld]
innodb_autoinc_lock_mode=2
这个参数可以让MySQL在生成新的自增ID的时候,不会阻塞其他事务对表的访问。对于记录修改时间自己改变的问题,加入该配置项之后,我们再次修改数据,就可以发现update_time字段的值不再改变了。