当列在其他 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,
...
);
所以我有几个表,但只显示 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,
...
);