Mysql使用on update current_timestamp问题

 更新时间:2023年03月20日 14:27:01   作者:FrankyD90  
这篇文章主要介绍了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;

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

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)
);

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

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

包括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这个数值会自动更新。

每次对这条记录进行更新,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)中的数据列创建索引。

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

总结

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

相关文章

  • MySQL for update锁表还是锁行校验(过程详解)

    MySQL for update锁表还是锁行校验(过程详解)

    在MySQL中,使用for update子句可以对查询结果集进行行级锁定,以便在事务中对这些行进行更新或者防止其他事务对这些行进行修改,这篇文章主要介绍了MySQL for update锁表还是锁行校验,需要的朋友可以参考下
    2024-02-02
  • Mysql隔离性之Read View的用法说明

    Mysql隔离性之Read View的用法说明

    这篇文章主要介绍了Mysql隔离性之Read View的用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • 一文带你了解MySQL中的子查询

    一文带你了解MySQL中的子查询

    子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入,SQL中子查询的使用大大增强了SELECT 查询的能力,本文带大家详细了解MySQL中的子查询,需要的朋友可以参考下
    2023-06-06
  • 将图片储存在MySQL数据库中的几种方法

    将图片储存在MySQL数据库中的几种方法

    今天小编就为大家分享一篇关于将图片储存在MySQL数据库中的几种方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • 在大数据情况下MySQL的一种简单分页优化方法

    在大数据情况下MySQL的一种简单分页优化方法

    这篇文章主要介绍了在大数据情况下MySQL的一种简单分页优化方法,分页优化是MySQL优化的常用手段之一,需要的朋友可以参考下
    2015-05-05
  • Linux下二进制方式安装mysql5.7版本和系统优化的步骤

    Linux下二进制方式安装mysql5.7版本和系统优化的步骤

    这篇文章主要介绍了Linux下二进制方式安装mysql5.7版本和系统优化的步骤,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • MySQL中B树索引和B+树索引的区别详解

    MySQL中B树索引和B+树索引的区别详解

    这篇文章主要为大家详细介绍了MySQL中B树索引和B+树索引的区别,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • 解决Mysql磁盘IO占用过高的问题

    解决Mysql磁盘IO占用过高的问题

    这篇文章主要介绍了解决Mysql磁盘IO占用过高的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • Mysql使用on update current_timestamp问题

    Mysql使用on update current_timestamp问题

    这篇文章主要介绍了Mysql使用on update current_timestamp问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • 带你快速了解SQL窗口函数

    带你快速了解SQL窗口函数

    窗口函数,也叫OLAP函数(Online Anallytical Processing,联机分析处理),可以对数据库数据进行实时分析处理,下面这篇文章主要给大家介绍了关于SQL窗口函数的相关资料,需要的朋友可以参考下
    2022-03-03

最新评论