我设置了两张表:
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
之后,它看起来像这样:
在我将数据插入B
之后,它看起来像这样:
然后执行以下语句:
delete from a where id=1;
我得到以下结果:"Error: foreign key constraint failed"
然后,我重新启动sqlite3
并重试,但这次我首先输入以下内容:
PRAGMA foreign_keys = 1;
还是不行......
4条答案
按热度按时间i2byvkas1#
Table B
的行的外键引用了您试图删除的Table A
行的主键值,因此删除它会破坏数据库的完整性。您可以在外键定义中包含
ON DELETE CASCADE
。这样,当您从Table A
中删除一个条目时,Table B
中链接到被删除行的所有条目也将被删除。不知道这是否适合您的应用程序。xkrw2x1b2#
“问题”在于您在表B上设置了一个外键。
这意味着表B中的列
id2
引用表A中的列id
。Table B
中的Lord of the Rings
和Catch 22
都链接到Table A
中的John
。因此,如果不先删除Table B
中的这两个条目,则无法删除John
。另一种方法是删除外键。
有关详细信息,请参阅this文档。
ryevplcw3#
您可以尝试以下操作:
对于删除:
zbsbpyhn4#
检查您在外键中插入的数据。我得到了同样的错误,而且是插入的错误数据