27

我已经设置了两个表:

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;

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

4

2 回答 2

26

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

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

于 2013-03-16T16:35:35.787 回答
11

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

foreign key(id2) references A(id)

这意味着id2表 B 中的列引用id表 A 中的列。Lord of the RingsCatch 22fromTable B都链接到Johnfrom Table A。因此,如果John不先删除其他两个条目,则无法删除Table B

另一种方法是删除外键。

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

于 2013-03-16T00:03:40.173 回答