MySQL中对于UPDATE_TIME字段我们有时候会设置ON UPDATE CURRENT_TIMESTAMP,表示在数据库数据有更新的时候UPDATE_TIME的时间会自动更新(如果数据库数据值没有变化的话,UPDATE_TIME是不会自动更新的)。那么假设一个场景,我们有一个长事务有10秒,在进入事务第2秒的时候我们执行了一个update操作,然后往下继续执行,直到第10秒,事务提交。此时数据库记录的时间是执行update的时候的第2秒的时间点呢?还是事务提交后的第10秒的时间点?

事务提交完成后,保存到数据库的时间是执行update的第2秒的时间点。

如果UPDATE_TIME只是用来记录更新时间,那么这个自动更新的时间点倒是没有什么影响。但是如果想要用UPDATE_TIME来作为数据同步(比如同步到另一个库,或者es之类的)的依据,那么就不能够这样定义。因为我们使用UPDATE_TIME作为更新,一般也是要求准实时同步,假如一个事务比较长,在事务还没提交过程中我们已经记录了更新的时间,等事务提交后,这个UPDATE_TIME的时间我们是没有同步到的。

举个栗子:一个长事务的开始时间为12:00:00,结束时间为12:00:10,在12:00:02的时候执行了update操作,此时数据库的UPDATE_TIME的时间还是12:00:00,因为事务还没提交。

与此同时有个定时任务在扫描这段时间内的数据,比如12:00:00到12:00:03,没有数据,因此将12:00:03记录下来,下次从这个时间点继续往后扫描,等12:00:10时长事务提交,此时数据库中该条数据的UPDATE_TIME值为12:00:02,但是定时任务扫描不会再扫描中这条数据了,就会导致同步数据不完整。对这种情况,我们只能够在程序中进行设置UPDATE_TIME的值,而不应该通过数据库本身设置ON UPDATE CURRENT_TIMESTAMP。

问题描述MySQL中对于UPDATE_TIME字段我们有时候会设置ON UPDATE CURRENT_TIMESTAMP,表示在数据库数据有更新的时候UPDATE_TIME的时间会自动更新(如果数据库数据值没有变化的话,UPDATE_TIME是不会自动更新的)。那么假设一个场景,我们有一个长事务有10秒,在进入事务第2秒的时候我们执行了一个update操作,然后往下继续执行,直到第10秒,事务...
在部署程序时遇到的一个问题, MySQL 定义举例如下: 代码如下:CREATE TABLE `example` (  `id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,  `created` TIMESTAMP NOT NULL DEFAULT CURRENT _ TIMESTAMP ,  `last Update d` TIMESTAMP NOT NULL ON UPDATE CURRENT _ TIMESTAMP ,  PRIMARY KEY (`id`)) ENGINE=InnoDB;这段SQL是我从项目中摘取出来的,在测试机器上一切正常,但是部署到生产机器上My
文章目录1. 设置“ON UPDATE CURRENT _ TIMESTAMP ”2. 取消“ON UPDATE CURRENT _ TIMESTAMP ” 1. 设置“ON UPDATE CURRENT _ TIMESTAMP TIMESTAMP 和 DATETIME列可以自动初始化并 更新 为当前日期和 时间 (即当前 时间 戳), TIMESTAMP 或 DATETIME列定义可以为默认值和自动 更新 值(一个而不是另一个)或两者都不指定当前 时间 戳,不同的列可以具有不同的自动属性组合,可以使用 DEFAULT CURRENT _TIM
Mysql 使用ON UPDATE CURRENT _ TIMESTAMP 注意点 最近项目里 时间 字段(datetime, timestamp )用到了ON UPDATE CURRENT _ TIMESTAMP 属性,自动 更新 时间 戳。以下记录一些需注意的地方。 先说结论: 如果你设置了 时间 随当前 时间 更新 ( ON UPDATE CURRENT _ TIMESTAMP ),那么当你 更新 字段时,只有字段值发生变化了,你的 时间 字段才会变为 UPDATE 操作时的 时间 。 即没有字段 更新 时,虽然执行了 update 语句,也执行成功了, 时间 字段是
大家好,我是架构摆渡人。这是实践经验系列的第七篇文章,这个系列会给大家分享很多在实际工作中有用的经验,如果有收获,还请分享给更多的朋友。 今天给大家分享一个容易忽略的问题,正是因为容易忽略,所以才要重视。 我们的业务表中有两个字段是必不可少的,分别是创建 时间 和修改 时间 ,这样就知道数据是什么时候创建的,最后一次的修改 时间 是什么时候。 就是经常会在修改 时间 上看到这个语句ON UPDATE CURRENT _ TIMESTAMP ,SQL语句如下: ` update _time` timestamp NULL DEFAUL
MySQL 中,有某个 时间 字段(如 update _time): ①、当该字段类型设置为 timestamp 时,如果其默认值赋值为 CURRENT _ TIMESTAMP ,那么插入一条记录时,该字段的值会自动设置为系统当前 时间 ; ②、如果设置或在navicat可视化GUI中勾选了 “ON UPDATE CURRENT _ TIMESTAMP ”字段属性时,则 时间 字段会随着 update 命令进行实时 更新 。即当数据表的其他字段发生变化时,该 时间 字段自动 更新 为最新的 时间 。 初始化测试表person: CREATE TA CURRENT _ TIMESTAMP ()可以把 MYSQL TIMESTAMP 类型设置为当前的 时间 。 ON UPDATE 个人觉得这个是个神器,一般用于当某个字段是 update TIme,最后修改 时间 的时候,使用这个ON UPDATE 即可。这样就不用开发者自己去处理了, MySQL 能自动将其处理。 最后来说下索引,这个是来源于百度,具体是谁的,我...
"on update current _ timestamp " 是一种 MySQL 数据库中的功能,它可以自动 更新 一条记录的 时间 戳为当前 时间 戳。在创建一个表时,可以将一个DATETIME或 TIMESTAMP 类型的列设置为"on update current _ timestamp ",这样当该记录发生 更新 时,该列的值就会自动 更新 为当前 时间 戳。 举个例子,假设有一个名为"test_table"的表,其中有一个名为" update _time"的列,它被设置为"on update current _ timestamp "。如果我们执行一条 UPDATE 语句来 更新 一条记录,那么" update _time"列的值将自动 更新 为当前 时间 戳。这在记录数据的变更 时间 时非常有用。