ITPub博客

首页 > 数据库 > 数据库开发技术 > MySQL中"更新时间"字段的更新时点问题

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

原创 数据库开发技术 作者:bisal 时间:2022-09-14 07:50:00 0 删除 编辑
我们在设计表时,通常为了记录数据插入和更新的时间,会定义两个字段,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 (  id bigint not null auto_increment comment '主键自增',  ...  create_time timestamp not null default current_timestamp comment '创建记录时间戳',  update_time timestamp not null default current_timestamp comment '更新记录时间戳',  primary key (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 (  id bigint not null auto_increment comment '主键自增',  ...  create_time timestamp not null default current_timestamp comment '创建记录时间戳',  update_time timestamp not null default current_timestamp on update current_timestamp comment '更新记录时间戳',  primary key (id));


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



近期更新的文章:

《最近碰到的一些问题》

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

《Oracle的online index rebuild》

《TiDB沙箱环境初体验》

《最近碰到的一些问题》


近期的热文:

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


文章分类和索引:

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

原文作者:bisal的个人杂货铺;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论
Oracle ACE,10g/11g OCP,11g OCM,国内首批Oracle YEP成员(Oracle Young Expert Program,Oracle用户组年轻专家项目),EXIN DevOps Master,Oracle爱好者,微信公众号:bisal的个人杂货铺

注册时间:2022-06-21

  • 博文量
    539
  • 访问量
    2801306