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"列的值将自动
更新
为当前
时间
戳。这在记录数据的变更
时间
时非常有用。