微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决当在其他表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 小提琴。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。