я создаю триггер mysql (совершенно новый для триггеров) и получаю сообщение об ошибке:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 5
код:
CREATE TRIGGER contact_name
AFTER UPDATE ON contacts
FOR EACH ROW
BEGIN
SET full_name = CONCAT(NEW.fname,' ',NEW.lname)
WHERE contacts_id = $contacts_id;
END;
Я совершенно не понимаю, почему он не позволяет мне настроить триггер.
при каждом обновлении таблицы «контакты» я хочу, чтобы столбец «full_name» был равен CONCAT (fname, «, lname) «fname» и «lname» также являются столбцами таблицы контактов.






SET full_name = CONCAT(NEW.fname,' ',NEW.lname) WHERE contacts_id = $contacts_id;
Это недопустимый синтаксис:
SET не принимает предложение WHERE (запросы sql, такие как SELECT, UPDATE, INSERT)
$contacts_id совершенно неизвестен СУБД
Похоже, вы пытаетесь автоматически обновить значение поля full_name, когда UPDATE выполняется для таблицы contacts.
Для этого вам нужно будет использовать триггер BEFORE UPDATE (вместо AFTER UPDATE), где вы можете установить значение NEW.full_name. Обычно также рекомендуется убедиться, что значение не было указано в запросе на обновление, прежде чем устанавливать его:
CREATE TRIGGER foo BEFORE UPDATE ON contacts
FOR EACH ROW
IF NEW.full_name IS NULL THEN
SET NEW.full_name := CONCAT(
COALESCE(NEW.fname, OLD.fname),
' ',
COALESCE(NEW.lname, OLD.fname)
);
END IF;;
благодаря. Меня беспокоит только то, что он использует раньше. он тоже обновит последнее обновление? или есть возможность использовать "после"?
и я все еще получаю ту же самую ошибку, просто другую строку ** # 1064 - у вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, для правильного синтаксиса для использования рядом с '' в строке 7 **
и контактная скоба тоже не должна быть закрыта?
@AndrewKorneychuk: да, в моем запросе была опечатка, где отсутствовала закрывающая скобка для CONCAT: я только что исправил это.
@AndrewKorneychuk: да, триггер срабатывает при каждом обновлении, непосредственно перед обновлением строки, что дает вам возможность изменить значения до того, как они будут записаны в базу данных.
Не могли бы вы описать, какова цель вашего триггера?