#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;