Foreign-Key

SQLITE:引用多個表級聯刪除的多個外鍵

  • February 18, 2019

在 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

我試過JOIN但不幸的是它不能在 SQLite 中工作。我不知道怎麼用TRIGGER。是否可以在上述情況下使用 ON CASCADE DELETE

您可以在級聯刪除上使用

例子

打開 FK 支持

PRAGMA foreign_keys = ON

創建樣本數據

CREATE TABLE TableA
(
id INTEGER primary key ,
name varchar
);
CREATE TABLE TableC
(
id INTEGER primary key,
name varchar
);
CREATE TABLE TableB
(
id INTEGER primary key,
issues varchar,
tb_aid INTEGER,   
tb_cid  INTEGER    ,
CONSTRAINT fk_TBLC
FOREIGN KEY (tb_cid)
REFERENCES TableC(id)
ON DELETE CASCADE,
CONSTRAINT fk_TBLA
FOREIGN KEY (tb_aid)
REFERENCES TableA(id)
ON DELETE CASCADE
);
INSERT INTO TableA(id,name) VALUES(1,'test');
INSERT INTO TableC(id,name) VALUES(1,'test');
INSERT INTO TableB(id,issues,tb_aid,tb_cid) VALUES(1,'test',1,1);

從 TableA 中刪除值

DELETE FROM TableA where id = 1;

從表 B 中選擇

SELECT * FROM TableB;

結果

id 問題 tb_aid tb_cid

DB<>小提琴

您的範例中確實有雙向 FK,雖然我認為這不是一個好的設計,但您可以使用下面的 DB Fiddle 之類的東西。

DB<>小提琴

引用自:https://dba.stackexchange.com/questions/230041