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

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

作者头像
bisal
发布于 2022-09-29 08:21:59
发布于 2022-09-29 08:21:59
5.4K00
代码可运行
举报
运行总次数: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
运行
AI代码解释
复制
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
运行
AI代码解释
复制
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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
时间戳,这样用就对了
时间戳字段在MySQL中经常使用到,比如需要记录一行数据创建的时间或修改的时间时,我们通常会使用时间戳即timestamp字段。本篇文章主要介绍timestamp字段的使用方法及相关参数,希望大家读完能对timestamp有更深的认识。
MySQL技术
2020/01/17
1.2K0
MySQL库表设计小技巧
在我们项目开发中,数据库及表的设计可以说是非常重要,我遇到过很多库表设计比较杂乱的项目,像表名、字段名命名混乱、字段类型设计混乱等等,此类数据库后续极难维护与拓展。我一直相信只有优秀的库表设计才能发挥出MySQL最大的性能,前面有篇文章也分享了数据库的使用规范,本篇文章主要讲几个库表设计的小技巧,希望对大家有所启发。
MySQL技术
2020/05/19
2.8K0
MySQL timestamp类型列值自动更新
MySQL中使用timestamp定义字段,默认情况下会给字段添加自动更新的属性,本文将分析这个自动更新的设置。 问题概述 一个表中定义了两个timestamp类型的字段, create_time TIMESTAMP NOT NULL COMMENT '创建时间', update_time TIMESTAMP NOT NULL COMMENT '更新时间' 新插入记录时,给create_time和update_time各自赋予当前时间值,没出现问题。更新记录时代码中只更新update_time,结果cre
JavaQ
2018/04/04
3.9K0
hudi时间旅行查询完整版
本文从头开始讲述使用Flink引擎实现hudi数据湖基于commit_time的查询语义。基本使用可参考前面文章hudi时间旅行查询
从大数据到人工智能
2022/09/09
2.2K0
hudi时间旅行查询完整版
适合中小型公司的Mysql数据库使用规范
这个是某公司技术基础建设的一部分,本次提出秉着分享的精神跟大家一起探讨探讨,欢迎互相切磋~
IT大咖说
2020/04/21
1.2K0
Mybatis-plus 上
MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
张小驰出没
2021/04/15
4360
Mybatis-plus 上
MySQL插入重复后进行覆盖更新
在MySQL中,常常会有唯一键的约束,当使用Java插入重复的值后,会报异常我们需要进行捕获处理。
半月无霜
2023/10/26
5970
唯一主键方案之数据库维护区间分配
我们介绍一种基于数据库维护自增 ID 区间,结合内存分配的策略,这也是淘宝的 TDDL 等数据库中间件使用的主键生成策略。
JMCui
2021/08/20
6370
基于Java实现牛奶网上订购系统的设计
如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统牛奶订购信息管理难度大,容错率低,管理人员处理数据费工费时,所以专门为解决这个难题开发了一个牛奶订购系统,可以解决许多问题。牛奶订购系统可以实现商家管理,商品订单管理,用户管理,商品管理,商品评价管理等功能。
鲜于言悠
2025/01/19
940
基于Java实现牛奶网上订购系统的设计
mybatis 实现插入或更新数据功能,数据存在时只更新
在mysql中,提供有on duplicate key update 指令,该指令表示如果唯一索引(UNIQUE)或主键(PRIMARY KEY)出现重复值时,则执行更新操作;如果不存在唯一冲突,则执行插入操作。
鳄鱼儿
2024/05/21
7430
insert into,insert ignore into, on duplicate key update,replace into-唯一键约束
当MySQL表字段设置unique key或者primary key时,被约束的字段就必须是唯一的。新插入数据直接使用insert into,如果出现唯一性冲突,就会抛出异常。我们可以根据需求选择合适的插入语句。
IT工作者
2022/01/10
5730
面试官:MySQL 唯一索引为什么会导致死锁?
insert ignore会忽略数据库中已经存在的数据(根据主键或者唯一索引判断),如果数据库没有数据,就插入新的数据,如果有数据的话就跳过这条数据.
蜗牛互联网
2022/10/31
1.7K0
MySQL 8.0 如何创建一张规范的表
如果 InnoDB 表没有显式定义主键,则可能会选择唯一索引做为主键,但是唯一索引很可能不是递增的,写入数据时,很可能会导致数据页频繁分裂,从而导致写入效率低和页空间浪费。这也是选择自增 int 类型或者有序 UUID 做为主键的原因。
数据库交流
2022/06/15
3.9K0
腾讯TDSQL分区表介绍(1/2)
TDSQL集群支持创建集中式实例和分布式实例。在使用分布式实例的时候,可以创建以下几种类型的表:
胖五斤
2022/11/10
3.6K0
一口气说出 9种 分布式ID生成方式,面试官有点懵了
前两天公众号有个粉丝给我留言吐槽最近面试:“四哥,年前我在公司受点委屈一冲动就裸辞了,然后现在疫情严重两个多月还没找到工作,接了几个视频面试也都没下文。好多面试官问完一个问题,紧接着说还会其他解决方法吗?能干活解决bug不就行了吗?那还得会多少种方法?”
程序员小富
2020/02/16
1.1K0
一口气说出 9种 分布式ID生成方式,面试官有点懵了
微服务综合案例-01-需求分析
  前面我们分别给大家介绍了SpringBoot,SpringCloud的Eureka(注册中心),ribbon(负载均衡),Feign(声明式服务调用),Hystrix(服务容错)等内容,在介绍后续内容之前我们穿插通过一个案例来综合使用下前面介绍的内容。
用户4919348
2019/06/17
1.1K0
MySQL关于时间设置的注意事项
时间真的存在吗?有观点认为,时间只是人类构想出来的一种概念,是用来衡量事物变化的标准。对于数据库来说,时间伴随着数据并进。让我们进入MySQL时间漩涡中看一看。
数据和云
2021/05/07
2K0
MySQL关于时间设置的注意事项
update自更新字段添加新字段是否会更新旧数据
验证:一张具备自更新字段的表,如果新增一个字段,原表数据的update_time字段是否会更新?
薄刀刀
2022/04/29
1.2K0
分库分表—4.数据迁移系统文档一
(3)binlog消息消费记录表——etl_binlog_consume_record
东阳马生架构
2025/02/19
620
关于 MySQL 数据类型
drop table if exists test_time; create table test_time(     year_value year,     date_value date,     time_value time,     datetime_value datetime,     timestamp_value timestamp )engine=innodb default charset=utf8 comment="测试时间表";
星哥玩云
2022/08/18
5890
相关推荐
时间戳,这样用就对了
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档