SQLITE:多个外键引用多个 table 级联删除
SQLITE: Multiple foreign key referenced to multiple table cascade delete
在 SQLite 中,我想删除父 table 行,它必须删除所有相关的子 table 行。我已经解决了 StackExchange 和其他网站上的所有问题,但我的查询不满意。
我有四个 table。
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
我试过 JOIN 但不幸的是它在 SQLite 中不起作用。我不知道如何使用 TRIGGER
。对于上述情况是否可以使用ON CASCADE DELETE
。
这里可以使用级联删除。例如,对于 TableC
,您可以使用以下定义:
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
)
上述table定义中约束的目的是将tb_bid
列链接为指向[=15=中的主键id
列的外键].这意味着如果 TableB
中的父记录被删除,SQLite 会将删除级联到 TableC
中的所有子记录。
您可以将 TableB
定义如下:
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
)
在 SQLite 中,我想删除父 table 行,它必须删除所有相关的子 table 行。我已经解决了 StackExchange 和其他网站上的所有问题,但我的查询不满意。
我有四个 table。
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
我试过 JOIN 但不幸的是它在 SQLite 中不起作用。我不知道如何使用 TRIGGER
。对于上述情况是否可以使用ON CASCADE DELETE
。
这里可以使用级联删除。例如,对于 TableC
,您可以使用以下定义:
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
)
上述table定义中约束的目的是将tb_bid
列链接为指向[=15=中的主键id
列的外键].这意味着如果 TableB
中的父记录被删除,SQLite 会将删除级联到 TableC
中的所有子记录。
您可以将 TableB
定义如下:
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
)