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

时间:2014-07-02 06:19:15

标签: sql sqlite

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

ALTER TABLE users 
 ADD COLUMN dayChoice_id INTEGER 
             NOT NULL REFERENCES dayChoice(dayChoice_id) DEFAULT 0

我收到错误“无法添加带有非NULL默认值的REFERENCES列”。真的吗?那么我该如何添加该列呢?

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:4)

来自docs

  

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

您提供的默认值不是NULL。

它与其他要求不兼容:

  

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

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