ON DELETE внешних ключей трёх и более таблиц в SQLite3

Рейтинг: 0Ответов: 1Опубликовано: 23.08.2023

У меня есть три таблицы: schedules, pairs, pairs_places. Структура таблиц:

schedules

  • id (Первичный ключ)
  • gid
  • day
  • photo_id
  • can_clean

pairs

  • id (Первичный ключ)
  • schedule_id (Внешний ключ на schedules.id. ON DELETE CASCADE)
  • ptime
  • sort
  • name

pairs_places

  • id (Первичный ключ)
  • pair_id (Внешний ключ на pairs.id. ON DELETE CASCADE)
  • teacher_id
  • pair_place

При удалении записи из schedules (DELETE FROM schedules WHERE id=1) я хочу чтобы все записи из pairs и pairs_places, связанные с удалённой записью тоже удалились. То есть удалятся все записи из pairs, которые связаны с schedule, а так же записи из pairs_places, которые связаны с удалёнными записями из pairs. Но когда я провожу этот запрос, удаляется запись из schedules, удаляются записи из pairs, но не из pairs_places. Поддерживает ли SQLite3 подобное удаление? Если да, то как мне настроить БД чтобы проблема решилась?

Ответы

▲ 0

Я смог добиться желаемого результата с помощью триггеров.

CREATE TRIGGER pairs_cleaner AFTER DELETE ON pairs
BEGIN
    DELETE FROM pairs_places WHERE pairs_places.pair_id = OLD.id;
END

Записи из pairs удаляются засчёт связи внешним ключом, а записи из pairs_places удаляются, когда удаляются и pairs.