DROP TABLE IF EXISTS `insur_test`;
CREATE TABLE `insur_test` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `clues_code` bigint DEFAULT NULL COMMENT '线索编码',
  `creator` varchar(32) DEFAULT NULL COMMENT '创建人',
  `create_time` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
  `updater` varchar(32) DEFAULT NULL COMMENT '更新人',
  `update_time` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3)  COMMENT '更新时间',
  `deleted` int DEFAULT '0' COMMENT '是否删除',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=183 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='线索表';

在插入数据时,如果 create_time update_time 不指定则存储当前时间的数据,如果指定则存储指定的数据

在数据修改时。update_time会自动东西时间

datetime类型与timestamp类型有何区别

datetime 若带有毫秒时,类型 TIMESTAMP 占用 7 个字节,而 DATETIME 无论是否存储毫秒信息,都占用 8 个字节

timestamp 可以存储表示时区

DATETIME性能比timestamp更好,timestamp带有时区,需要系统底层进行转换

 

要调用操作系统底层系统函数 __tz_convert(),而这个函数需要额外的加锁操作,以确保这时操作系统时区没有修改。所以,当大规模并发访问时,由于热点资源竞争,会产生两个问题。

  • 性能不如 DATETIME: DATETIME 不存在时区转化问题。
  • 性能抖动: 海量并发时,存在性能抖动问题。

为了优化 TIMESTAMP 的使用

[mysqld]

time_zone = "+08:00"

MySQL的timestamp类型是4个字节,最大值是2的31次方减1,也就是2147483647,转换成北京时间就是2038-01-19 11:14:07

 

最后修改于 2023-04-28 16:40:00
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付
上一篇