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

Mysql使用%ignore_a_1%n 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)中的数据列创建索引。

为了创建索引,应选择一个最规整、最紧凑的数据列,如一个整数类型的数据列,只要有可能。 

以上就是Mysql使用on update current_timestamp问题怎么解决的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/148114.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月2日 18:47:40
下一篇 2025年12月2日 19:03:31

相关推荐

发表回复

登录后才能评论
关注微信