我已经有一个表格,简化示例:
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 进行测试。
最佳答案
通过将列创建为 NOT NULL,您已经创建了一个 CONSTRAINT - 声明输入该列的值永远不会为 NULL。
NULL 的默认值(设置为 null 是在 INSERT 期间不存在的值)会创建无效数据。
遗憾的是,可空性约束是 mysql 中数据类型的一部分,使列可为空的唯一方法是
ALTER TABLE t MODIFY COLUMN c INT NULL;
关于mysql - 无法为列设置默认空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36685216/