#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,
- удаленные данные таблицы A, вставленные в таблицу AAAAA
- удаленные данные таблицы 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 ;