У меня есть 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
Поскольку аргументы удаляются каскадом при удалении сообщений, это должно работать.
Однако этот триггер не работает при удалении обсуждения.Либо я получаю сообщение о том, что есть нарушение ограничения внешнего ключа, если я удаляю каскадное удаление между дебатами и аргументами, либо я получаю только дебаты и удаленные аргументы (не сообщения), когда сохраняю ранее цитированное каскадное удаление.
У кого-нибудь есть идеи, как это сделать?
Редактировать:
Я фактически основал часть удаления триггера наэтот вопрос: Удалить все строки в таблице на основе другой таблицы