Создание триггера для таблицы в базе данных 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-сообщество

Кстати: создание пустого триггера, как это, отлично работает:

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, поэтому я очень рад, если что-то здесь будет полезно :-)

Что произойдет, если вы удалите "SET"? Также вы должны изменить NEW.sHeaders + «BCC: [email protected]» на CONCAT (NEW.sHeaders, «BCC: [email protected]»)

Greg 22.01.2009 19:24

Я делаю этот комментарий, а не ответ, потому что это предположение: p

Greg 22.01.2009 19:24

Спасибо! Я пробовал, но синтаксическая ошибка, похоже, вызвана оператором if. Даже следующее не удается: CREATE TRIGGER add_bcc BEFORE INSERT ON MailQueue FOR EACH ROW BEGIN IF 1 = 1 THEN END IF; КОНЕЦ; К сожалению, MySQL не дает никаких хороших подсказок, в чем ошибка ...

Georg Ledermann 22.01.2009 19:28
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
17
3
21 197
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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 ;

Другие вопросы по теме