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

bisal(ChenLiu) bisal(ChenLiu)     2022-12-01     221

关键词:

我们在设计表时,通常为了记录数据插入和更新的时间,会定义两个字段,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篇文章分类和索引

phpmysql更新时间日期

..."’whereid=".$userid);这样就可以了。参考技术Aphpmysql更新时间日期php中向mysql中插入当前时间方法:例:insertintotablename(fieldname)values(now())时间函数的选用说明:NOW()函数以`'YYYY-MM-DDHH:MM:SS'返回当前的日期时间,可以直... 查看详情

如何在 MySql 中更新 Json 数据类型?

】如何在MySql中更新Json数据类型?【英文标题】:HowtoupdateJsondatatypeinMySql?【发布时间】:2017-07-1603:45:58【问题描述】:我的表中有Json数据类型的列。在本专栏中,我会这样记录电话数据:"0":"044-33565388","1"... 查看详情

php对两个mysql数据表的修改问题?把表a的内容更新到表b里面。

...ewperson"中已有一部分数据,不能删除。只能把A的数据更新到B。更新内容时,相应字段没有内容,就全部留空。能否做一个php文件,按确认更新,就可以把A的数据更新到B里面。仅,也只有20分。谢谢高手如果你的库A和库B在同一... 查看详情

如何在 MYSQL 中添加、插入和更新 JSON 值?

】如何在MYSQL中添加、插入和更新JSON值?【英文标题】:Howtoadd,insertandupdateJSONvalueintoMYSQL?【发布时间】:2022-01-1501:41:06【问题描述】:我在MYSQL表中有一个JSON列(\'posts\')。当有人发布内容时,我想将此数据添加到此列中,例... 查看详情

mysqljson字段中数值的加减

表table1中有字段f,值为"a":"count":1,"b":"count":3现在假设需要将a.count的值加3,结果为"a":"count":4,"b":"count":3,请问sql怎么写?如果是mysql5.7版本以下的,这个字段的值在mysql... 查看详情

Access 中的更新表

】Access中的更新表【英文标题】:UpdateTableinAccess【发布时间】:2014-04-1902:02:28【问题描述】:在MS-Access2007中,我有一个表[Test_Master],其中有一个字段[DT_REPORT]。如果字段[Size]="small",我想更新[Test_Norm_Due]by2months。如果字... 查看详情

entitymanagerupdate数据未更新null

sql语句update字段null不能用isnullupdate更新数据时null字段是否更新进数据库总结情况一:不需要更新进数据库情况二:需要更新进数据库(推荐方法3)sql语句update字段null不能用isnullupdate字段为null值时,要用 setcolumn=null,而不是s... 查看详情

python导出mysql数据库中当天的数据

...代码,真心感谢,送出满分报答ID不是有序的,lastUpdate是时间字段,数据库为cms-mysql,密码:123456,表名:rule_list,另外的字段你可以随便取几个,感谢你的表结构是怎样的?如果你的表结构中有时间属性或有明显的id等范围特征... 查看详情

mysql一张表中如何查询某个字段最长值的那条记录?

案例;表officeid="1",itemId="asdf1234",name="李四",officeId="1"id="2",itemId="asdf123"name="李四",officeId='2'id="3",itemId="asdf12"name="李四",officeId="3"id="4"it... 查看详情

mysql中向空表load数据

...录:mysql>INSERTINTO表名VALUES("hyq","M");8、更新表中数据:mysql->UPDATE表名SET字段名1='a',字段名2='b'WHERE字段名3='c';9、用文本方式将数据装入数据表中:mysql>loaddatalocalinfile"d:/mysql.txt"intotab... 查看详情

调用 $(".myItem").dateInput() 后 angularjs 输入字段未更新

】调用$(".myItem").dateInput()后angularjs输入字段未更新【英文标题】:angularjsinputfieldnotupdatingaftercalling$(".myItem").dateInput()【发布时间】:2017-10-0900:50:32【问题描述】:在我拥有日期时间编辑器之前,我的角度输入字段... 查看详情

mysql:如何更新时间最近的一条记录

每条记录都有一个记录时间的字段,我想只更新最接近当前时间的一条记录,应该怎么写SQL语句呀,谢谢大家帮帮我!呵呵,一楼方法确实可以用,只是在具体解决问题当中却不会那么去用,一般来说,你要更新某字段,都是更... 查看详情

如何在 Swift 中编辑或更新文本字段中的文本?

】如何在Swift中编辑或更新文本字段中的文本?【英文标题】:HowtoeditorupdatethetextinsidetheTextFieldinSwift?【发布时间】:2018-04-2506:11:05【问题描述】:这是此屏幕的.gif:http://g.recordit.co/73jHPP5LE6.gif如上图所示,有一个UILabelRp"25.00... 查看详情

c#中如何把datatable导入到mysql中

...sql里面的数据表,前面的3个str是你的mysql里面数据表里的字段名,后面的三个str表示你的datatable里面的字段名,当然可以不止三个,自己继续加呗,只要前后对应就行了。。。【不保证调试成功,思路绝对正确。】 查看详情

webservice接口,如何用java代码更新数据库中的一个字段的值,其他字段值保持不变?

...开户公司其他值不便我现在写的这个只输如开户公司的话更新完之后就只剩下开户公司了其他全是null了参考技术A<ahref="a.asp?id=<%=id%>">111</a>a.asp页面:<!--#includefile="conn.asp"--><%ifrequest("id")... 查看详情

mysql中存储时间的问题

...打印time就是TueApr1000:00:00CST2012这种格式的,而mysql中存的时间格式是1212-12-12,在插入的时候会自动转换么??要按你的数据库字段了……MYSQL数据库时间字段可以设大概三种类型varchar(或char)——将时间以字符串的形式保存,这是... 查看详情

如何在 Mysql X DevAPI 中查询 Null 或 Missing 字段?

...英文标题】:HowtoqueryforNullorMissingFieldsinMysqlXDevAPI?【发布时间】:2021-02-2407:00:36【问题描述】:如何在MysqlXDevAPI中查询null或缺失的字段?我尝试了.find("ageISNULL")和.find("age=null"),但都不起作用。> 查看详情

php,mysql时间差问题

表中有个datetime类型字段dtime,我需要从表中提取当前时间与dtime相差不到2个小时的那条记录,然后在php中进一步操作,其中的时间差怎么计算?比如现在时间是‘2009-04-2209:30:00’,我需要取出表中’2009-04-2209:30:00‘到‘2009-04-221... 查看详情