MySQL Trigger: Удалить из таблицы ПОСЛЕ УДАЛЕНИЯ

Область применения: две таблицы. Когда создается новый клиент, у него есть некоторая информация о нем, хранящаяся во 2-й таблице (это также было сделано с использованием триггера, он работает как положено). Вот пример моей структуры таблицы и отношений.

Таблица 1-> Покровители

+-----+---------+-----+
+  id +   name  + val +
+=====+=========+=====+
+  37 +  george +  x  +
+-----+---------+-----+
+  38 +  sally  +  y  +
+-----+---------+-----+

Таблица 2 -> patron_info

+----+-----+----------+
+ id + pid +   name   +
+----+-----+----------+
+  1 +  37 +  george  +
+----+-----+----------+
+  2 +  38 +  sally   +
+----+-----+----------+

Администратор может управлять покровителями. Когда они решают удалить покровителя, покровитель удаляется из таблицы 1 patrons, На данный момент ничего не происходит с таблицей 2 patron_info,

Я просто пытаюсь создать триггер для удаления из таблицы 2, когда в таблице 1 удален элемент. Вот что я попробовал...

Изначально я пытаюсь сбросить курок, если он существует (просто чтобы очистить воздух)...

DROP TRIGGER IF EXISTS log_patron_delete;

Затем я пытаюсь создать триггер потом...

CREATE TRIGGER log_patron_delete AFTER DELETE on patrons
FOR EACH ROW
BEGIN
DELETE FROM patron_info
    WHERE patron_info.pid = patrons.id
END

В этот момент я получаю синтаксическую ошибку 1046: Check syntax near END on line 6, Я не знаю, в чем заключается ошибка на данный момент. Я пробовал несколько разных вариантов. Кроме того, я должен использовать разделитель здесь?

Кто-нибудь может помочь восстановить мое здравомыслие?

3 ответа

Решение

Я думаю, что есть ошибка в коде триггера. Поскольку вы хотите удалить все строки с идентификатором удаленного посетителя, вы должны использовать old.id (в противном случае это приведет к удалению других идентификаторов).

Попробуйте это как новый триггер:

CREATE TRIGGER log_patron_delete AFTER DELETE on patrons
FOR EACH ROW
BEGIN
DELETE FROM patron_info
    WHERE patron_info.pid = old.id;
END

Не забывайте ";" на запрос на удаление. Также, если вы вводите код TRIGGER в окне консоли, также используйте разделители.

Почему бы не установить ON CASCADE DELETE на внешний ключ patron_info.pid?

create trigger doct_trigger
after delete on doctor
for each row
delete from patient where patient.PrimaryDoctor_SSN=doctor.SSN ;
Другие вопросы по тегам