2016-04-18 192 views
1

默认为空值,我已经有一个表,简化的例子:无法设置

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?

我的意思是,没有任何由'MODIFY COLUMN'命令引起的开销。

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

+0

您已经创建了表不能为空列“C”的唯一途径,所以你不能做它默认为NULL。没有将列修改为Nullable,恐怕你永远不能将它设置为NULL ..一旦你设置为Nullable,当你在这个列中添加一个没有值的新记录时,它应该默认为NULL。 – ydoow

回答

1

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

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

由于黯然空约束是在MySQL的数据类型的一部分,以使列可为空将

ALTER TABLE t MODIFY COLUMN c INT NULL;