SQLITE:引用多个表级联删除的多个外键

SQLITE:引用多个表级联删除的多个外键,sqlite,foreign-keys,cascading-deletes,Sqlite,Foreign Keys,Cascading Deletes,在SQLite中,我想删除父表行,它必须删除所有相关的子表。我已经浏览了StackExchange和其他网站上的所有问题,但我的查询没有令人满意的地方 我有四张桌子 TableA: id, primary key name TableB: id, primary key issues, tb_aid, #foreign key ref to TableA id tb_cid, #foreign key ref to TableC id tb_did, #foreign key ref to T

在SQLite中,我想删除父表行,它必须删除所有相关的子表。我已经浏览了StackExchange和其他网站上的所有问题,但我的查询没有令人满意的地方

我有四张桌子

TableA:
id, primary key
name

TableB:
id, primary key
issues,
tb_aid, #foreign key ref to TableA id
tb_cid, #foreign key ref to TableC id
tb_did, #foreign key ref to TableD id
tb_eid, #foreign key ref to TableE id

TableC:
id, primary key
column1,
tb_bid, #foreign key ref to TABLE B id

TableD:
id,
name

TableE
id,
name

我尝试加入,但不幸的是它在SQLite中不起作用。我不知道如何使用触发器。对于上述情况,是否可以在级联删除时使用

您可以在此处使用级联删除。例如,对于
表C
,可以使用以下定义:

CREATE TABLE TableC (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    column1 TEXT,
    tb_bid INTEGER NOT NULL,
    CONSTRAINT fk_b FOREIGN KEY (tb_bid) REFERENCES TableB (id) ON DELETE CASCADE
)
上表定义中约束的目的是将
tbu bid
列作为外键链接到
TableB
中的主键
id
列。这意味着,如果
TableB
中的父记录被删除,SQLite将把该删除级联到
TableC
中的所有子记录

您可以将
表B
定义如下:

CREATE TABLE TableB (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    issues TEXT,
    tb_aid INTEGER NOT NULL,
    tb_cid INTEGER NOT NULL,
    tb_did INTEGER NOT NULL,
    tb_eid INTEGER NOT NULL,
    CONSTRAINT fk_a FOREIGN KEY (tb_aid) REFERENCES TableA (id) ON DELETE CASCADE,
    CONSTRAINT fk_c FOREIGN KEY (tb_cid) REFERENCES TableC (id) ON DELETE CASCADE,
    CONSTRAINT fk_d FOREIGN KEY (tb_did) REFERENCES TableD (id) ON DELETE CASCADE,
    CONSTRAINT fk_e FOREIGN KEY (tb_eid) REFERENCES TableE (id) ON DELETE CASCADE
)

您可以在此处使用级联删除。例如,对于
表C
,可以使用以下定义:

CREATE TABLE TableC (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    column1 TEXT,
    tb_bid INTEGER NOT NULL,
    CONSTRAINT fk_b FOREIGN KEY (tb_bid) REFERENCES TableB (id) ON DELETE CASCADE
)
上表定义中约束的目的是将
tbu bid
列作为外键链接到
TableB
中的主键
id
列。这意味着,如果
TableB
中的父记录被删除,SQLite将把该删除级联到
TableC
中的所有子记录

您可以将
表B
定义如下:

CREATE TABLE TableB (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    issues TEXT,
    tb_aid INTEGER NOT NULL,
    tb_cid INTEGER NOT NULL,
    tb_did INTEGER NOT NULL,
    tb_eid INTEGER NOT NULL,
    CONSTRAINT fk_a FOREIGN KEY (tb_aid) REFERENCES TableA (id) ON DELETE CASCADE,
    CONSTRAINT fk_c FOREIGN KEY (tb_cid) REFERENCES TableC (id) ON DELETE CASCADE,
    CONSTRAINT fk_d FOREIGN KEY (tb_did) REFERENCES TableD (id) ON DELETE CASCADE,
    CONSTRAINT fk_e FOREIGN KEY (tb_eid) REFERENCES TableE (id) ON DELETE CASCADE
)

它很好用。非常感谢。假设TableC没有指向TableB,而TableB有3个不同表的3个外键,那么解决方案是什么?那么在create table语句中需要3个
containt
entires。除此之外,无需更改任何其他内容。创建表期间,表B或每个表中的所有3个
约束都可以正常工作。非常感谢。假设TableC没有指向TableB,而TableB有3个不同表的3个外键,那么解决方案是什么?那么在create table语句中需要3个
containt
entires。除此之外,无需更改任何其他内容。创建表期间,表B或每个表中的所有3个
约束