无法为列设置默认空值

时间:2016-04-18 03:54:55

标签: mysql

我已经有一张表,简化示例:

CREATE TABLE t (c INT NOT NULL);

我需要将列默认值更改为NULL,所以我尝试了:

ALTER TABLE t ALTER COLUMN c SET DEFAULT NULL;

但我收到了错误"错误代码:1067。' c'"的默认值无效。 它看起来很奇怪,因为查询符合官方文档。

我甚至试图:

ALTER TABLE t ALTER COLUMN c DROP DEFAULT;

并在它之后制作一个' SET DEFAULT NULL'查询,但发生了同样的错误。 有趣的是,该查询如下:

ALTER TABLE t ALTER COLUMN c SET DEFAULT 1;

执行无误。

我知道,在我的情况下可以使用以下方法将列默认值更改为NULL:

ALTER TABLE t MODIFY COLUMN c INT NULL;

但是这个查询对于大表来说真的很慢(它比像' SET DEFAULT 1'这样的查询要慢得多)

那么,如何将默认值更改为NULL?

我的意思是,没有任何由“修改栏”引起的开销。命令。

详细信息:MySQL x64版本5.7.10,Win8。使用MySQL Workbench进行测试。

1 个答案:

答案 0 :(得分:1)

通过将列创建为NOT NULL,您已创建了一个CONSTRAINT - 声明输入该列的值可能永远不会为NULL。

默认值NULL(设置为null是INSERT期间不存在的值)将创建无效数据。

遗憾的是,可空性约束是mysql中数据类型的一部分,使列可为空的唯一方法是

 ALTER TABLE t MODIFY COLUMN c INT NULL;