Триггер MySQL не сохраняется

#mysql #sql

#mysql #sql

Вопрос:

Выполнение этого:

 CREATE TRIGGER `after_order_insert`
    AFTER INSERT ON `hb_orders` FOR EACH ROW
    BEGIN
       UPDATE hb_accounts
       SET hb_accounts.domain = (SELECT companyname FROM hb_client_details
                     WHERE hb_client_details.id = NEW.client_id
                            LIMIT 1)
       WHERE hb_accounts.client_id = NEW.client_id;
    END
  

Приводит к этому:

/ * Ошибка SQL (1064): у вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с » в строке 8 */

Чего мне не хватает? Это должно сработать, не так ли?

Спасибо

Ответ №1:

Скорее всего, вы пытаетесь добавить триггер без изменения разделителя. Поскольку триггер содержит точку с запятой, вам придется временно заменить разделитель на что-то другое;

 DELIMITER //

CREATE TRIGGER `after_order_insert`
    AFTER INSERT ON `hb_orders` FOR EACH ROW
    BEGIN
       UPDATE hb_accounts
       SET hb_accounts.domain = (SELECT companyname FROM hb_client_details
                     WHERE hb_client_details.id = NEW.client_id
                            LIMIT 1)
       WHERE hb_accounts.client_id = NEW.client_id;
    END //

DELIMITER ;
  

Ошибка SQLFiddle с успешным добавлением триггера. Обратите внимание, что разделитель изменен в настройках,

Ответ №2:

Вот еще одна реализация:

 CREATE TRIGGER `after_order_insert`
AFTER INSERT ON `hb_orders` FOR EACH ROW
UPDATE hb_accounts a
join hb_client_details b on a.client_id = b.id and b.id = new.client_id
set a.domain = b.companyname;