前言
在使用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);
create_time和update_time会自动更新
如果想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);
结果为:
更新时间
更新语句为
update t_user t set t.`name` = 'bbb' where t.id = 1;
执行结果成功如下:
这个时候发现
update_time更改了,create_time没改
总结
在使用MyQSQL开发过程中,可以把时间更新交给MyQSQL维护,不用在程序维护时间,但是要注意的就是,MyQSQL的时区问题,默认可能会少8小时,一般要设置成东八区啥的,这个看自己