sqlite3“外键约束失败”

时间:2013-03-15 23:52:33

标签: sqlite foreign-keys

我已经设置了两个表:

CREATE TABLE A
(
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    name TEXT
 );

CREATE TABLE B
(
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    id2 INTEGER,
    book TEXT,
    FOREIGN KEY(id2) REFERENCES A(id)
);

将数据插入A后,它看起来像这样:

1    John

2    Amy

3    Peter

将数据插入B后,它看起来像这样:

1     1     Lord of the Rings

2     1     Catch 22

3     2     Sum of All Fears

4     3     Hunt for Red October
然后我执行以下语句:

delete from a where id=1;

我得到以下内容:"Error: foreign key constraint failed"

然后我重新启动sqlite3并重试,但这次我先输入:

PRAGMA foreign_keys = 1;

它仍然不起作用......

2 个答案:

答案 0 :(得分:12)

Table B的行的外键引用了您要删除的Table A行的主键值,因此删除它会违反数据库的完整性。

您可以在外键定义中包含ON DELETE CASCADE。这样,当您从Table A删除条目时,链接到已删除行的Table B中的所有条目也将被删除。不知道这是否适合您的申请。

答案 1 :(得分:5)

“问题”是您在表B上设置了外键。

foreign key(id2) references A(id)

这意味着表B中的列id2引用了表A中的列id。来自Lord of the Rings的{​​{1}}和Catch 22都与{{1}相关联来自Table B。因此,如果不首先从John删除其他两个条目,则无法删除Table A

替代方法是删除外键。

有关详细信息,请参阅this文档。