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

Создание триггера для таблицы в базе данных MySQL (синтаксическая ошибка)

Мне сложно определить триггер для базы данных MySQL. Я хочу изменить текстовое поле, прежде чем вставлять новую строку (при заданном условии). Это то, что я пробовал:

CREATE TRIGGER add_bcc
BEFORE INSERT ON MailQueue
FOR EACH ROW BEGIN
  IF (NEW.sHeaders LIKE "%[email protected]%") THEN
    SET NEW.sHeaders = NEW.sHeaders + "BCC:[email protected]";
  END IF;
END; 

Но всегда получаю ошибку "неправильный синтаксис". Я застрял, что я делаю неправильно? Я использую MySQL 5.0.51a-community

BTW: Создание пустого триггера, как это хорошо работает:

CREATE TRIGGER add_bcc
BEFORE INSERT ON MailQueue
FOR EACH ROW BEGIN
END; 

Но это тоже не удается:

CREATE TRIGGER add_bcc
BEFORE INSERT ON MailQueue 
FOR EACH ROW BEGIN
  IF 1=1 THEN
  END IF; 
END;

Это мой первый раз, когда я использую stackoverflow.com, поэтому я очень взволнован, если полезно разместить что-то здесь: -)

4b9b3361

Ответ 1

Вам нужно изменить разделитель - MySQL видит первый ";" как конец инструкции CREATE TRIGGER.

Попробуйте следующее:

/* Change the delimiter so we can use ";" within the CREATE TRIGGER */
DELIMITER $$

CREATE TRIGGER add_bcc
BEFORE INSERT ON MailQueue
FOR EACH ROW BEGIN
  IF (NEW.sHeaders LIKE "%[email protected]%") THEN
    SET NEW.sHeaders = NEW.sHeaders + "BCC:[email protected]";
  END IF;
END$$
/* This is now "END$$" not "END;" */

/* Reset the delimiter back to ";" */
DELIMITER ;