web-dev-qa-db-ja.com

SQLITE:複数のテーブルカスケード削除を参照する複数の外部キー

SQLiteで親テーブルの行を削除したいのですが、関連するすべての子テーブルを削除する必要があります。 StackExchangeや他のウェブサイトですべての質問を終えましたが、満足のいく質問がありませんでした。

4つのテーブルがあります。

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上記の場合。

1
user2660409

カスケード削除で使用できます

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 <>フィドル

0
Randi Vertongen