修改 MySQL update_time 默认值的坑

时间:2024-04-02 20:17:34
由于按规范需要对 update_time 字段需要对它做默认值的设置
现在有一个原始的表是这样的
CREATE TABLE `test_up` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `update_time` datetime default null COMMENT '操作时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

表里的数据 update_time 字段真的有 NULL 的情况

由于按规范需要对 update_time 字段需要对它做默认值的设置。

操作步骤是这样的:
  1. 复制一个表出来,表结构如下:

CREATE TABLE `test_up2` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '操作时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
  1. 复制数据
insert into test_up2 select * from test_up;
  1. 看结果
    update_time 字段 NULL 的就成了 0000-00-00 00:00:00
    这会导致程序出错。
    在这里插入图片描述
所以这么操作有一定坑,一定要注意,可以在操作把原数据空数据不全,避免线上问题。