Подтвердить что ты не робот

Триггерные вызовы при каскадном удалении

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

4b9b3361

Ответ 2

Подводя итог ответам @Niel de Wet и @Browny Lin:

  • Печально каскадные удаления не активируют триггеры в MySQL.
  • Одно из решений - не использовать каскадные удаления, а вместо этого осуществлять автоматическое удаление с помощью другого триггера.

Ответ 3

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

Много раз это вопрос копирования/вставки, и иногда это требует обширной перезаписи кода.

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

Ответ 4

CREATE TABLE doc (
docID INTEGER NOT NULL AUTO_INCREMENT,
langCode CHAR(2) NOT NULL,
title VARCHAR(32),
PRIMARY KEY (docID, langCode)
) Type=InnoDB;

CREATE TABLE author (
authorID INTEGER NOT NULL AUTO_INCREMENT,
docID CHAR(2) NOT NULL,
name VARCHAR(32),
PRIMARY KEY (authorID),
FOREIGN KEY (docID) REFERENCES doc(docID) ON DELETE CASCADE ON UPDATE CASCADE
) Type=InnoDB;