我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Mysql使用on update current_timestamp问题

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Mysql使用on update current_timestamp问题

Mysql使用on update current_timestamp注意点

最近项目里时间字段(datetime,timestamp)用到了ON UPDATE CURRENT_TIMESTAMP属性,自动更新列时间戳。以下记录一些需注意的地方。

先说结论

如果你设置了时间随当前时间戳更新( ON UPDATE CURRENT_TIMESTAMP),那么当你更新字段时,只有字段值发生变化了,你的时间字段才会变为UPDATE操作时的时间。

即没有字段更新时,虽然执行了update语句,也执行成功了,时间字段是不会更新的。

比如我们新建一张表:

CREATE TABLE `t_temp` (
  `id` int(11) NOT NULL DEFAULT '0',
  `username` varchar(255) DEFAULT NULL,
  `upd_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '默认取当前时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

然后插入一行数据,然后执行更新。

Mysql使用on update current_timestamp问题

UPDATE t_temp SET username = 'mm' WHERE id = 1;

会发现时间列不会更新。

同样,在程序中使用了一些框架,比如tk-myBATis,使用更新方法时(比如int updateByPrimaryKeySelective(T record);方法),如果字段没有实际更新,虽然语法执行了,时间字段也不会更新,这点在系统中容易忽视。

CURRENT_TIMESTAMP()和ON UPDATE及索引相关

基本概率

CURRENT_TIMESTAMP()可以把MYSQL中TIMESTAMP类型设置为当前的时间。

ON UPDATE个人觉得这个是个神器,一般用于当某个字段是updateTIme,最后修改时间的时候,使用这个ON UPDATE即可。这样就不用开发者自己去处理了,MySQL能自动将其处理。

最后来说下索引,这个是来源于百度,具体是谁的,我也忘记了:索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。

更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。索引分为聚簇索引和非聚簇索引两种,聚簇索引是按照数据存放的物理位置为顺序的,而非聚簇索引就不一样了;聚簇索引能提高多行检索的速度,而非聚簇索引对于单行的检索很快。

要注意的是,建立太多的索引将会影响更新和插入的速度,因为它需要同样更新每个索引文件。对于一个经常需要更新和插入的表格,就没有必要为一个很少使用的where字句单独建立索引了,对于比较小的表,排序的开销不会很大,也没有必要建立另外的索引。

代码与实例

如下建表代码:

CREATE TABLE timeDemo(
 
	id VARCHAR(64) NOT NULL,
	timeTest TIMESTAMP NOT NULL,
	PRIMARY KEY (id)
);

当添加一个新数据的时候:

Mysql使用on update current_timestamp问题

他会自动创建时间,比如某个订单表,他要记录下订单的时间,就可以使用这种方法进行处理。

包括updateTime,最后更新时间:

CREATE TABLE timeDemo2(
 
	id VARCHAR(64) NOT NULL,
	createTime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP(),
	updateTime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP() ON UPDATE CURRENT_TIMESTAMP(),
	PRIMARY KEY (id)
 
);

//上面这个mysql5.7以上版本不会有问题,但5.7以下版本就会有问题

//5.7以下的版本推荐使用程序去插入。

这里用5.5演示下ON UPDATE的效果

CREATE TABLE timeDemo3(
 
	id VARCHAR(64) NOT NULL,
	updateTime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP() ON UPDATE CURRENT_TIMESTAMP(),
	PRIMARY KEY (id)
);

当修改了这个表的某些数据后,updateTime这个数值会自动更新。

Mysql使用on update current_timestamp问题

每次对这条记录进行更新,updateTime就会自动更新,这样的话,就不用程序员自己去处理了。

这里可以发现,难过很多互联网公司都喜欢用MySQL5.7以上的版本,而传统行业还是在用MySQL5.5版本。

说下索引key和index

CREATE TABLE timeDemo4(
 
	id VARCHAR(64) NOT NULL,
	id2 VARCHAR(64) NOT NULL,
	updateTime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP() ON UPDATE CURRENT_TIMESTAMP(),
	PRIMARY KEY (id),
	KEY(id2)
)ENGINE=INNODB DEFAULT CHARSET=utf8

普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。因此,应该只为那些最经常出现在查询条件(WHERE column = ...)或排序条件(ORDER BY column)中的数据列创建索引。

只要有可能,就应该选择一个数据最整齐、最紧凑的数据列(如一个整数类型的数据列)来创建索引。 

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Mysql使用on update current_timestamp问题

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Mysql使用on update current_timestamp问题

目录mysql使用on update current_timestamp注意点先说结论CURRENT_TIMESTAMP()和ON UPDATE及索引相关基本概率代码与实例总结Mysql使用on update current_timesta
2023-03-20

postgresql兼容MySQL on update current_timestamp问题

目录PostgreSQL兼容mysql on update current_timestamp问题描述解决方案postgresql和mysql常用语法比较1、分区表2、语法3、索引4、其它总结postgresql兼容MySQL on upd
2023-03-20

Mysql使用on update current_timestamp问题怎么解决

本文小编为大家详细介绍“Mysql使用on update current_timestamp问题怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“Mysql使用on update current_timestamp问题怎么解决”文章能
2023-07-05

postgresql兼容MySQL on update current_timestamp问题怎么解决

这篇文章主要介绍“postgresql兼容MySQL on update current_timestamp问题怎么解决”,在日常操作中,相信很多人在postgresql兼容MySQL on update current_timestamp
2023-07-05

记一次线上问题 → 对 MySQL 的 ON UPDATE CURRENT_TIMESTAMP 的片面认知

开心一刻  老婆痛经,躺在沙发上,两岁的女儿看着她问道  女儿:妈妈,你怎么了  老婆:妈妈肚子痛  女儿:哦,妈妈你头疼  老婆:不是头疼,妈妈是肚子疼  女儿用她的不锈钢饭碗砸向老婆的额头,说道:妈妈,你哪里疼  老婆:头疼,头疼  老婆幽怨的看着我,说道
记一次线上问题 → 对 MySQL 的 ON UPDATE CURRENT_TIMESTAMP 的片面认知
2017-07-21

mysql中insert并发问题(on DUPLICATE KEY UPDATE)

目录一、insert,存在则更新,不存在则新增1、表结构如下:2、sql语句 3、批量插入,某一条记录存在,则更新;其余进行新增二、insert,存在则不进行任何操作;不存在则新增1、sql语句三、总结小编最近在项目中,遇到了一个问题,因为
2023-01-09

mysql中insert并发问题(on DUPLICATE KEY UPDATE)

本文主要介绍了mysql中insert并发问题(on DUPLICATE KEY UPDATE),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-01-09

MySQL中ON DUPLICATE key update的使用

目录一、主键索引、唯一索引和普通索引的关系二、实战操作1.ON DUPLICATE key update使用介绍:2.ON D编程客栈UPLICATE key update测试样例:三、总结一、主键索引、唯一索引和普通索引的关系主键索引:
2023-05-25

MYSQL ON UPDATE CURRENT_TIMESTAMP当字段值发生改变时才会更新记录的时间

目录疑惑验证结论补充说明疑惑今天看到一个博客说:时间戳有ON UPDATE CURRENT_TIMESTAMP属性,无论值有没有改变时间都会更新 (下面是别人博客的截图)表示疑惑,于是动手建表写字段验证了一波。验证1. 建表:设置u
2023-01-05

MySQL中ON DUPLICATE KEY UPDATE语句的使用

目录前言一、语法与功能二、使用场景三、注意事项四、实例分析前言在mysql数据库中,INSERT INTO ... ON DUPLICATE KEY UPDATE 是一个强大的SQL语句,它结合了插入新记录和更新已存在记录的功能于一体。这
MySQL中ON DUPLICATE KEY UPDATE语句的使用
2024-08-21

MybatisPlus 使用 saveOrUpdate 详解(慎用),及问题解决方法&mysql保存或更新 ON DUPLICATE KEY UPDATE

今天的想法是,要在插入数据库时,如果有某某一个主要字段的值重复,则不插入,否则则插入! 看了一下mybatis-Plus是有这个saveOrUpdate 方法! 原本使用save时是没有问题了,改成saveOrUpdate 用了一下就报错了
2023-08-23

mysql特殊语法insert into .. on duplicate key update ..使用详解

文章目录 一、前言二、insert into … on duplicate key update ...1、处理逻辑2、示例:表结构1> 不存在记录,插入的情况2> 存在记录,可以更新字段的情况3> 存在记录,不可以更新字段的情况4
2023-08-17

SQL语句中的ON DUPLICATE KEY UPDATE使用

目录一:主键索引,唯一索引和普通索引的关系主键索引唯一索引:普通索引:二:ON DUPLICATE KEY UPDATE使用测试(mysql下的Innodb引擎)1:ON DUPLICATE KEY UPDATE功能介绍:2:ON DUPL
2022-08-11

mysql特殊语法insert into .. on duplicate key update ..使用方法详析

目录一、前言二、i编程客栈nsert into … on duplicate key update …1、处理逻辑2、示例:3、Update子句获取inset部分的值4、last_ins编程ert_id()总结一
2023-04-12

mysql特殊语法insert into .. on duplicate key update ..使用方法详析

在我们的日常开发中经常会遇到过这样的情景,查看某条记录是否存在,不存在的话创建一条新记录,存在的话更新某些字段,下面这篇文章主要给大家介绍了关于mysql特殊语法insert into .. on duplicate key update ..使用方法的相关资料,需要的朋友可以参考下
2023-05-15

MySQL中CURRENT_TIMESTAMP的使用方式是什么

这篇文章主要讲解了“MySQL中CURRENT_TIMESTAMP的使用方式是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL中CURRENT_TIMESTAMP的使用方式是什么
2023-06-21

编程热搜

目录