Ошибка MySQL при создании триггера обновления

я создаю триггер 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;

Я совершенно не понимаю, почему он не позволяет мне настроить триггер.

Не могли бы вы описать, какова цель вашего триггера?

GMB 02.02.2019 19:21

при каждом обновлении таблицы «контакты» я хочу, чтобы столбец «full_name» был равен CONCAT (fname, «, lname) «fname» и «lname» также являются столбцами таблицы контактов.

Andrew Korneychuk 02.02.2019 19:29
Освоение архитектуры микросервисов с 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
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
2
2
41
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

благодаря. Меня беспокоит только то, что он использует раньше. он тоже обновит последнее обновление? или есть возможность использовать "после"?

Andrew Korneychuk 02.02.2019 20:12

и я все еще получаю ту же самую ошибку, просто другую строку ** # 1064 - у вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, для правильного синтаксиса для использования рядом с '' в строке 7 **

Andrew Korneychuk 02.02.2019 20:15

и контактная скоба тоже не должна быть закрыта?

Andrew Korneychuk 02.02.2019 20:16

@AndrewKorneychuk: да, в моем запросе была опечатка, где отсутствовала закрывающая скобка для CONCAT: я только что исправил это.

GMB 02.02.2019 20:21

@AndrewKorneychuk: да, триггер срабатывает при каждом обновлении, непосредственно перед обновлением строки, что дает вам возможность изменить значения до того, как они будут записаны в базу данных.

GMB 02.02.2019 20:24

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