MySQL自动更新时间

382 阅读2分钟

前言

在使用MySQL数据库中,可以通过设置字段的默认值和更新机制来实现自动更新时间和创建时间。这样可以确保每次插入或更新记录时,时间字段会自动更新为当前时间

自动更新时间

创建sql语句

在创建表的create_time等时间时,可以使用CURRENT_TIMESTAMP,具体如下:

-- ----------------------------
-- Table structure for device_properties_rule
-- ----------------------------
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user`  (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称',
  `delete_status` tinyint NULL DEFAULT 0 COMMENT '有效状态: 1:失效,0:未失效',
  `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;

插入语句

执行insert语句

insert into t_user (id, name, delete_status) VALUES (1, 'aaa', 0);

image.png

create_timeupdate_time会自动更新

image.png

如果想MySQL数据库时间到毫秒级别,可以使用DATETIME(3)TIMESTAMP(3),如

-- ----------------------------
-- Table structure for device_properties_rule
-- ----------------------------
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user`  (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称',
  `delete_status` tinyint NULL DEFAULT 0 COMMENT '有效状态: 1:失效,0:未失效',
  `create_time` DATETIME(3) NULL DEFAULT CURRENT_TIMESTAMP(3),
  `update_time` DATETIME(3) NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;

执行insert语句

insert into t_user (id, name, delete_status) VALUES (1, 'aaa', 0);

结果为: image.png

更新时间

更新语句为

 update t_user t set t.`name` = 'bbb' where t.id = 1; 
 

执行结果成功如下: image.png 这个时候发现update_time更改了,create_time没改

image.png

总结

在使用MyQSQL开发过程中,可以把时间更新交给MyQSQL维护,不用在程序维护时间,但是要注意的就是,MyQSQL的时区问题,默认可能会少8小时,一般要设置成东八区啥的,这个看自己