当在其他表B,C等中将列作为FOREIGN KEYS引用列时,SQLite从表A中删除行

问题描述

所以我有几个表,但仅显示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

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

DELETE FROM G WHERE gNo = 'G4';

我知道还不完整。我尝试在该行的末尾使用CASCADE,但是会引发错误。然后,我尝试使用DELETE FROM G JOIN Table B WHERE gNo = 'G4';,但也无济于事。

在这里很迷路。

有帮助吗?

解决方法

您不能删除另一张表中的行所引用的行,这是外键的功能之一。

通常,您通常需要先删除子记录:

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,...
);
    
,

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

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

这告诉数据库,当您删除主表中的一行时,也要删除引用。

Here是db 小提琴。