синтаксическая ошибка с запросом триггера MySQL - PullRequest
1 голос
/ 17 октября 2011

, поэтому у меня следующий запрос:

CREATE TRIGGER `before_delete`
    BEFORE DELETE ON `abc` FOR EACH ROW
    BEGIN
        DELETE FROM def WHERE OLD.id = objID1 OR OLD.id = objID2;
        DELETE FROM ghi WHERE OLD.id = objID;
    END;

, но затем mysql жалуется, что в строке 1 рядом с 'END' есть синтаксическая ошибка ...

что я сделал не так?

1 Ответ

4 голосов
/ 17 октября 2011

Вам необходимо использовать трюк DELIMTIER, чтобы включить несколько операторов в блок процедуры.В противном случае он не может определить разницу между концом вашей процедуры и концом операторов внутри нее.На странице документации приведен пример использования ключевого слова delimiter.

Чтобы избавить вас от необходимости заходить на эту страницу и оглядываться по сторонам, думаю, это исправит:

DELIMITER $$
CREATE TRIGGER `before_delete`
BEFORE DELETE ON `abc` FOR EACH ROW
BEGIN
    DELETE FROM def WHERE OLD.id = objID1 OR OLD.id = objID2;
    DELETE FROM ghi WHERE OLD.id = objID;
END $$
DELIMITER ;
...