2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > MySQL中更新时间字段的更新时点问题

MySQL中更新时间字段的更新时点问题

时间:2023-06-01 10:08:30

相关推荐

MySQL中更新时间字段的更新时点问题

我们在设计表时,通常为了记录数据插入和更新的时间,会定义两个字段,create_time/insert_time和update_time,按照需求,记录插入的时间,会存储到create_time/insert_time字段中,记录更新的时间,会存储到update_time字段中,当创建记录时,会同步更新create_time/insert_time和update_time,然而,当更新记录时,只会更新update_time字段。

虽然我们的工程中设置了这两个字段,但是更新记录时,很可能就发现create_time/insert_time和update_time都做了更新,和实际是相反的。

原因可能就是在代码中没有对时间进行显性地设置,而且对时间的维护是MySQL自身进行管理的,例如,

create table test (idbigintnot nullauto_incrementcomment'主键自增',...create_timetimestampnotnulldefaultcurrent_timestamp comment '创建记录时间戳',update_timetimestampnotnulldefaultcurrent_timestampcomment'更新记录时间戳',primarykey(id));

通过SQL,我们看到create_time和update_time设置的都是DEFAULT CURRENT_TIMESTAMP,因此不管是新创建的记录,还是更新原有的记录,只要是有触发的操作,这两个时间就会被同步修改。

要达到预期效果,就需要改这个了。

解决方案:

将update_time的DEFAULT CURRENT_TIMESTAMP后面再加上条件限制 ON UPDATE CURRENT_TIMESTAMP,这样在更新记录时,只有更新时间被修改,创建时间就是最初创建记录的时间。

MySQL中的CURRENT_TIMESTAMP:

在创建时间字段的时候,

(1) DEFAULT CURRENT_TIMESTAMP

表示当插入数据的时候,该字段默认值为当前时间。

(2) ON UPDATE CURRENT_TIMESTAMP

表示每次更新这条数据的时候,该字段都会更新成当前时间。

这两个操作是MySQL数据库本身在维护,因此就可以根据这个特性来生成"创建时间"和"更新时间"两个字段,不需要代码来维护。

例如,

create table test (idbigintnot nullauto_incrementcomment'主键自增',...create_timetimestampnotnulldefaultcurrent_timestamp comment '创建记录时间戳',update_timetimestampnotnulldefaultcurrent_timestamp on update current_timestampcomment'更新记录时间戳',primarykey(id));

如果您认为这篇文章有些帮助,还请不吝点下文章末尾的"点赞"和"在看",或者直接转发pyq,

近期更新的文章:

《最近碰到的一些问题》

《磁盘空间分配的初次尝试》

《Oracle的online index rebuild》

《TiDB沙箱环境初体验》

《最近碰到的一些问题》

近期的热文:

《"红警"游戏开源代码带给我们的震撼》

文章分类和索引:

《公众号1000篇文章分类和索引》

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。