首页数据库Mysql使用on update current_timestamp问题怎么解决

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

时间2023-03-29 16:35:00发布访客分类数据库浏览771
导读:本文小编为大家详细介绍“Mysql使用onupdatecurrent_timestamp问题怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“Mysql使用onupdatecurrent_timestamp问题怎么解决”文章能帮助大家...
本文小编为大家详细介绍“Mysql使用onupdatecurrent_timestamp问题怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“Mysql使用onupdatecurrent_timestamp问题怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

    Mysql使用on update current_timestamp注意点

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

    先说结论

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

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

    比如我们新建一张表:

    CREATETABLE`t_temp`(
    `id`int(11)NOTNULLDEFAULT'0',
    `username`varchar(255)DEFAULTNULL,
    `upd_time`timestampNULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMPCOMMENT'默认取当前时间',
    PRIMARYKEY(`id`)
    )ENGINE=InnoDBDEFAULTCHARSET=utf8;
        

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

    UPDATEt_tempSETusername='mm'WHEREid=1;
        

    会发现时间列不会更新。

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

    CURRENT_TIMESTAMP()和ON UPDATE及索引相关

    基本概率

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

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

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

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

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

    代码与实例

    如下建表代码:

    CREATETABLEtimeDemo(
    
    	idVARCHAR(64)NOTNULL,
    	timeTestTIMESTAMPNOTNULL,
    	PRIMARYKEY(id)
    );
        

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

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

    包括updateTime,最后更新时间:

    CREATETABLEtimeDemo2(
    
    	idVARCHAR(64)NOTNULL,
    	createTimeTIMESTAMPNOTNULLDEFAULTCURRENT_TIMESTAMP(),
    	updateTimeTIMESTAMPNOTNULLDEFAULTCURRENT_TIMESTAMP()ONUPDATECURRENT_TIMESTAMP(),
    	PRIMARYKEY(id)
    
    );
        

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

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

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

    CREATETABLEtimeDemo3(
    
    	idVARCHAR(64)NOTNULL,
    	updateTimeTIMESTAMPNOTNULLDEFAULTCURRENT_TIMESTAMP()ONUPDATECURRENT_TIMESTAMP(),
    	PRIMARYKEY(id)
    );
        

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

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

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

    说下索引key和index

    CREATETABLEtimeDemo4(
    
    	idVARCHAR(64)NOTNULL,
    	id2VARCHAR(64)NOTNULL,
    	updateTimeTIMESTAMPNOTNULLDEFAULTCURRENT_TIMESTAMP()ONUPDATECURRENT_TIMESTAMP(),
    	PRIMARYKEY(id),
    	KEY(id2)
    )ENGINE=INNODBDEFAULTCHARSET=utf8

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

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

    读到这里,这篇“Mysql使用onupdatecurrent_timestamp问题怎么解决”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。

    声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

    mysql

    若转载请注明出处: Mysql使用on update current_timestamp问题怎么解决
    本文地址: https://pptw.com/jishu/711.html
    多个sheet Excel数据怎么导入数据库 Gitlab中如何优雅的拉取和合并代码(gitlab怎么拉取代码)

    游客 回复需填写必要信息