MySql更新字段自动刷新时间

2021-02-25  乐帮网

mysql笔记 mysql

经过网上查询得知MySQL可以设置列的一个属性,当表中任意列有数据更新时可以把指定列的时间刷新成当前时间或者指定时间。在MySQL 5.6.5之前,只有TIMESTAMP支持自动更新,并且一张表也只能设置一个自动更新列。MySQL 5.6.5以后,TIMESTAMP和DATETIME列都支持自动更新,且一个表可设置多个自动更新列。

下面介绍一下它的语句以及表现,可以使用ON UPDATE CURRENT_TIMESTAMP 指定当刷新时时间会自动刷新成当前时间。

   CREATE TABLE `userinfo` (
  `ID` INT(10) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT,
  `Number` VARCHAR(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '员工编号',
  `Name` VARCHAR(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '姓名',
  `UpdateTIME` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '数据更新时间',
  PRIMARY KEY (`ID`) USING BTREE
) ENGINE=INNODB AUTO_INCREMENT=416 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

上面的表当我更新用户的编号或者姓名时这个UpdateTIME 字段会被自动设置成当前时间,如果更新的值和原来的一样时此更新不会被触发。例如执行以下语句,它就会更新

UPDATE `userinfo` SET `Name` = 'lebang2020' WHERE ID = 1

如果不想触发可以写成如下语句

UPDATE `userinfo` SET `Name` = 'lebang2020',`UpdateTIME` =`UpdateTIME`  WHERE ID = 1

或者把这一个列的属性给去掉新建表时这一列就如下:

 `UpdateTIME` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '数据更新时间',

在工具里可以直接修改,以SQLyog为例:右键目标表>更改表>把更新的勾给去掉如下图:

sqlyog

写在最后,实现不知道这个功能想干嘛和软件的设计思想格格不入,所有的更新不要放到程序不可见的地方,无法版本控制也无法控制更新逻辑,更不容易觉察和跟踪数据来源。以上就是lebang2020.cn的分享。

公众号二维码

关注我的微信公众号
在公众号里留言交流
投稿邮箱:1052839972@qq.com

庭院深深深几许?杨柳堆烟,帘幕无重数。
玉勒雕鞍游冶处,楼高不见章台路。
雨横风狂三月暮。门掩黄昏,无计留春住。
泪眼问花花不语,乱红飞过秋千去。

欧阳修

付款二维码

如果感觉对您有帮助
欢迎向作者提供捐赠
这将是创作的最大动力