当列在其他 Tables B、C 等中被引用为 FOREIGN KEYS 时,SQLite 从 Table A 中删除行

SQLite Delete row from Table A when columns are referenced as FOREIGN KEYS in other Tables B, C, etc

所以我有几个表,但只显示 2 个作为示例:

Table G

gNo | gName | gAddress
G1  | Jean  | Bonalbo
G2  | Oscar | Berlin
G3  | Edd   | Brisbane
G4  | Bob   | California

Table B

gNo | gdate | rNo
G1  | 2019  | R21
G2  | 1993  | R03
G3  | 1989  | R26
G4  | 2020  | R04

现在,我需要从 Table G 中删除最后一行,但是 SQLite 一直说存在 FOREIGN KEY 约束失败。这就是我所做的:

DELETE FROM G WHERE gNo = 'G4';

我知道这还不完整。我尝试在该行的末尾使用 CASCADE,但它会抛出错误。然后我尝试使用 DELETE FROM G JOIN Table B WHERE gNo = 'G4'; 也没有用。

我在这里很迷茫。

有帮助吗?

您需要用cascade定义外键约束。您可以删除现有约束并将外键定义为:

create table b (
    . . .,
    gno int references g(gno) on delete cascace
);

这会告诉数据库,当您删除主数据库中的一行时 table,然后也删除引用。

Here 是一个 db<>fiddle.

您不能删除被另一行引用的行 table - 这是外键的功能之一。

您通常需要先删除子(人)记录:

delete from b where gno = 'G4';
delete from g where gno = 'G4);

否则,您需要更改外键的定义,使其包含 on delete cascade 选项:

create table b (
    gno text references g(gno) on delete cascade,
    gdate int,
    rno text,
    ...
);