Mysql修改字段为默认空

Mysql修改字段为默认空

数据库字段定义尽量不要为默认空,但是为了满足产品需求和减少开发量,所以直接将字段改为默认空。但是一样的修改SQL修改同一张表的两个Not Null字段其中一个1秒内完成;另外一个执行了1分钟都没有执行完。鉴于执行时间太慢和最近升级了数据库版本为8.0,所以中止执行,创建测试表验证SQL是否有问题。

DML

ALTER TABLE test_table_define MODIFY COLUMN type_name tinyint(1) DEFAULT NULL COMMENT 'Not Null Alter Null Test';

test_table_define:表名;type_name:字段名。

表创建结构

CREATE TABLE test_table_define (
  id int(11) NOT NULL AUTO_INCREMENT,
  type_name tinyint(4) DEFAULT 1 COMMENT 'Not Null Alter Null Test',
  remark_ varchar(255) DEFAULT NULL,
  PRIMARY KEY (id)
)
ENGINE = INNODB,
CHARACTER SET utf8,
COLLATE utf8_general_ci,
COMMENT = '测试表定义问题';

新增两条数据

INSERT INTO test_table_define (remark_) VALUES
('测试字段默认非空,用SQL改为默认空!'),
('测试字段默认非空,用SQL改为默认空!');

id与type_name默认生成

执行

  1. Mysql版本5.7.18执行:正常,SQL.sql: DML succeeded [0.015s]
  2. Mysql版本8.0.23执行:正常,SQL.sql: DML succeeded [0.459s]

修改后表结构

CREATE TABLE test_table_define (
  id int NOT NULL AUTO_INCREMENT,
  type_name tinyint DEFAULT NULL COMMENT 'Not Null Alter Null Test',
  remark_ varchar(255) DEFAULT NULL,
  PRIMARY KEY (id)
)
ENGINE = INNODB,
CHARACTER SET utf8,
COLLATE utf8_general_ci,
COMMENT = '测试表定义问题';

结论

所以,DML脚本是正确,版本升级之后没有其他帖子说的增加了限制不允许Not Null改为Null。
找了一张表数据333105修改两个字段默认空,执行相同的DML脚本结果分别是:SQL.sql: DML succeeded [0.459s],SQL.sql: DML succeeded [51.836s]。所以是数据量影响了DML执行时间。

后续

MODIFY COLUMN底层做了什么事情,那么慢?
同一张表数据量都是333105,都是MODIFY,为什么一个字段只需0.4S,另一个却需要51.836S?

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值