SQL триггер при удалении для реализации обратного каскада - PullRequest
0 голосов
/ 11 июня 2018

У меня есть 3 таблицы, важные для моей проблемы здесь.Дебаты состоят из нескольких аргументов, которые являются потомками постов.Когда я удаляю Дебаты, я хочу также удалить связанные аргументы и соответствующие сообщения.

Первое, что я попробовал, это создать каскадное удаление для аргументов, но это не удаляет сообщения.Действительно, для этого потребуется «обратное» каскадное удаление, поскольку сообщение является родителем аргумента.Как предложено в Есть ли какая-либо «обратная» опция ON DELETE CASCADE? , затем я попытался добавить триггер на удаление аргументов, чтобы также удалить сообщения, но этот вопрос ( на каскаде удаления не срабатываеттриггер ) показал, что MySQL «Триггеры не активируются действиями внешнего ключа».

Поэтому я хотел решить эту проблему, создав триггер, который будет в точности соответствовать тому, что я объяснил в первом абзаце.

CREATE TRIGGER argument_delete BEFORE DELETE on debates
FOR EACH ROW
BEGIN
DELETE FROM posts
       WHERE posts.id IN (SELECT arguments.id FROM arguments WHERE arguments.debate_id = debates.id);
END

Поскольку аргументы удаляются каскадом при удалении сообщений, это должно работать.

Однако этот триггер не работает при удалении обсуждения.Либо я получаю сообщение о том, что есть нарушение ограничения внешнего ключа, если я удаляю каскадное удаление между дебатами и аргументами, либо я получаю только дебаты и удаленные аргументы (не сообщения), когда сохраняю ранее цитированное каскадное удаление.

У кого-нибудь есть идеи, как это сделать?


Редактировать:

Я фактически основал часть удаления триггера наэтот вопрос: Удалить все строки в таблице на основе другой таблицы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...