D3DN_BLOG

  • 首页
  • About
求知若渴,虚心若愚
没有天生的高手,更没有永远的菜鸟
  1. 首页
  2. DB优化
  3. 正文

MYSQL字段类型更新时设置ON UPDATE CURRENT_TIMESTAMP自动保存数据库的时间

2021年9月16日 2075点热度

MySql的CURRENT_TIMESTAMP

在创建时间字段的时候

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

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

这两个操作是mysql数据库本身在维护,所以可以根据这个特性来生成【创建时间】和【更新时间】两个字段,且不需要代码来维护

如下:

CREATE TABLE `mytest` (
    `text` varchar(255) DEFAULT '' COMMENT '内容',
    `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

可以通过navicat的可视化界面直接操作

  • 优点:省事,开发的时候不用去考虑更新的时间
  • 缺点:增加数据库服务的开销,开启事务事件后插入时间的不准确性。
  • 问题描述
  • 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

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: MYSQL
最后更新:2025年8月15日

Moment

角度永远刁钻,关注点极其独特

点赞

Moment

角度永远刁钻,关注点极其独特

最新 热点 随机
最新 热点 随机
PHP中接口返回压缩后的响应(如 GZIP 压缩)的方法 双重 foreach 循环嵌套优化方案 王者人机自动助手 XX抹机下载 微霸改机工具 XP框架
双重 foreach 循环嵌套优化方案PHP中接口返回压缩后的响应(如 GZIP 压缩)的方法王者人机自动助手XX抹机下载
nginx负载均衡的三种方式 PHP中接口返回压缩后的响应(如 GZIP 压缩)的方法 微服务(Microservices)概念 模拟器9.0安装面具跟LSP(XP)框架 微霸改机工具 王者人机自动助手
标签聚合
架构 项目衔接 微服务 抹机工具 PHP Nginx MYSQL 王者荣耀
分类
  • DB优化
  • 未分类
  • 玩机空间
  • 编程技术
  • 脚本工具

COPYRIGHT © 2018-2025 d3dn.com. ALL RIGHTS RESERVED.转载请注明出处

Theme Kratos Made By Seaton Jiang

赣ICP备16000603号-2

赣公网安备36082902000188