sqlite3“外键约束失败”

r1wp621o  于 2022-11-30  发布在  SQLite
关注(0)|答案(4)|浏览(400)

我设置了两张表:

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;

还是不行......

i2byvkas

i2byvkas1#

Table B的行的外键引用了您试图删除的Table A行的主键值,因此删除它会破坏数据库的完整性。
您可以在外键定义中包含ON DELETE CASCADE。这样,当您从Table A中删除一个条目时,Table B中链接到被删除行的所有条目也将被删除。不知道这是否适合您的应用程序。

xkrw2x1b

xkrw2x1b2#

“问题”在于您在表B上设置了一个外键。

foreign key(id2) references A(id)

这意味着表B中的列id2引用表A中的列idTable B中的Lord of the RingsCatch 22都链接到Table A中的John。因此,如果不先删除Table B中的这两个条目,则无法删除John
另一种方法是删除外键。
有关详细信息,请参阅this文档。

ryevplcw

ryevplcw3#

您可以尝试以下操作:

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

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

对于删除:

PRAGMA foreign_keys = 0;
DELETE from A where id = 1;
PRAGMA foreign_keys = 1;
zbsbpyhn

zbsbpyhn4#

检查您在外键中插入的数据。我得到了同样的错误,而且是插入的错误数据

相关问题