Триггерные вызовы при каскадном удалении - PullRequest
23 голосов
/ 18 мая 2011

У меня есть таблица "A" в MySQL. Он имеет несколько ссылок с каскадным удалением на некоторые другие таблицы ("B", "C", "D" ...). Мне нужно использовать триггер, когда что-то удаляет из «А». Этот триггер работает, когда я удаляю записи из «A» напрямую. Но это не работает с каскадным удалением. Существует ли какая-либо версия MySQL, где мой триггер будет работать с каскадным удалением? Или, может быть, есть другой способ позвонить

Ответы [ 3 ]

27 голосов
/ 23 мая 2011

С http://dev.mysql.com/doc/refman/5.6/en/innodb-restrictions.html

Каскадные действия внешнего ключа не активируют триггеры

Другими словами, нельзя использовать триггер с каскадным удалением.

Также см. Связанные ошибки:

6 голосов
/ 30 января 2015

Чтобы суммировать ответы @Niel de Wet и @Browny Lin:

  1. К сожалению, каскадное удаление не активирует триггеры в MySQL.
  2. Одно из решений - не использовать каскадное удалениено вместо этого реализуйте автоматическое удаление с помощью другого триггера.
2 голосов
/ 30 декабря 2016

Позвольте мне рассказать, как я "исправлял" эту проблему с первого дня, когда я обнаружил, что она существует. Я копирую триггер из каскадной таблицы в первую таблицу, которая удалена напрямую. Это просто работает.

Во многих случаях это вопрос копирования / вставки, а иногда это требует обширного переписывания кода.

Самое приятное то, что когда Oracle наконец исправит это Ошибка , у вас будет только удалить код триггера из указанной таблицы. Voila!

...