我已经有一张表,简化示例:
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进行测试。
答案 0 :(得分:1)
通过将列创建为NOT NULL,您已创建了一个CONSTRAINT - 声明输入该列的值可能永远不会为NULL。
默认值NULL(设置为null是INSERT期间不存在的值)将创建无效数据。
遗憾的是,可空性约束是mysql中数据类型的一部分,使列可为空的唯一方法是
ALTER TABLE t MODIFY COLUMN c INT NULL;