使用引用向SQLite表添加NOT NULL列

Dan*_*eed 4 sql sqlite

我需要在现有的SQLite表中添加一个列,该表引用另一个表中的列.我用这个命令

ALTER TABLE users 
 ADD COLUMN dayChoice_id INTEGER 
             NOT NULL REFERENCES dayChoice(dayChoice_id) DEFAULT 0
Run Code Online (Sandbox Code Playgroud)

我收到错误"无法添加具有非NULL默认值的REFERENCES列".真的吗?那么我该如何添加列呢?

Goo*_*gie 7

您需要在执行此ALTER语句时禁用外键强制执行,如下所示:

PRAGMA foreign_keys = 0;
ALTER TABLE users ADD COLUMN dayChoice_id INTEGER
            NOT NULL REFERENCES dayChoice(dayChoice_id) DEFAULT 0;
PRAGMA foreign_keys = 1;
Run Code Online (Sandbox Code Playgroud)


laa*_*lto 5

文档

如果启用了外键约束,并且添加了带有REFERENCES子句的列,则该列的默认值必须为NULL。

您提供的默认值不是NULL。

它与另一个要求不兼容:

如果指定了NOT NULL约束,则该列必须具有非NULL的默认值。

您可以通过在之前临时禁用外键约束来解决此问题ALTER TABLE