SQLITE: несколько внешних ключей ссылаются на каскадное удаление нескольких таблиц - PullRequest
0 голосов
/ 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 для вышеуказанного случая.

1 Ответ

0 голосов
/ 18 февраля 2019

Вы можете использовать каскадное удаление здесь.Например, для 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
)

Цель ограничения в приведенном выше определении таблицы заключается в том, что он связывает столбец tb_bid как внешний ключ, указывающий напервичный ключ id столбец в TableB.Это означает, что если родительская запись в 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
)
...