запуск другого триггера не работает

#mysql #sql #triggers

#mysql #sql #триггеры

Вопрос:

У меня есть четыре таблицы и два триггера.

 Table A     tirggerA  , when before delete === > insert deleted data into Tabele AAAAA
Table B     tirggerB  , when before delete === > insert deleted data into Tabele BBBBB
  

проблема в том, что TriggerB хорошо работает при удалении некоторых данных в таблице B.

Я хочу что-то вроде при удалении данных из TableA,

  1. удаленные данные таблицы A, вставленные в таблицу AAAAA
  2. удаленные данные таблицы B (связанные с данными таблицы A) также вставлены в таблицу BBBBB.

Я использую каскадное удаление для таблицы B и взаимосвязи таблицы A.

Проблема в том, что TriggerB, похоже, никогда не срабатывает, когда некоторые данные удаляются в TableA. На самом деле это должно сработать, потому что у меня есть каскадное удаление связи между этими таблицами. Есть идеи?

Комментарии:

1. всем привет.. Я просто не использую каскадное УДАЛЕНИЕ между двумя таблицами и просто помещаю команду УДАЛЕНИЯ ТАБЛИЦЫ B в tirggerA. теперь работает хорошо. спасибо. 🙂

Ответ №1:

Ответ заключается в том, чтобы просто поместить delete команду в триггер для таблицы A.

Также вам нужно поместить код в after delete триггер, в поле перед удалением, удаление еще не произошло и может быть отменено.

 DELIMITER $$

CREATE TRIGGER ad_tableA_each AFTER DELETE ON tableA FOR EACH ROW
BEGIN
  INSERT INTO tableAAAA (f1,f2,f3) VALUES (old.f1, old.f2, old.f3);
  DELETE FROM tableB b WHERE b.a_id = old.id; /*use this instead of foreign key*/
END $$

CREATE TRIGGER ad_tableB_each AFTER DELETE ON tableB FOR EACH ROW
BEGIN
  INSERT INTO tableBBBB (f1,f2,f3) VALUES (old.f1, old.f2, old.f3);
END $$

DELIMITER ;