前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >MySQL中"更新时间"字段的更新时点问题

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

作者头像
bisal
发布2022-09-29 16:21:59
发布2022-09-29 16:21:59
5.2K00
代码可运行
举报
运行总次数: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自身进行管理的,例如,

代码语言:javascript
代码运行次数:0
运行
复制
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数据库本身在维护,因此就可以根据这个特性来生成"创建时间"和"更新时间"两个字段,不需要代码来维护。

例如,

代码语言:javascript
代码运行次数:0
运行
复制
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)
);

近期更新的文章:

最近碰到的一些问题

磁盘空间分配的初次尝试

Oracle的online index rebuild

TiDB沙箱环境初体验

最近碰到的一些问题

近期的热文:

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

文章分类和索引:

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/09/14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档