Ошибка MySQL при создании триггера обновления - PullRequest
0 голосов
/ 02 февраля 2019

я создаю триггер mysql (совершенно новый для триггеров) и получаю ошибку:

# 1064 - у вас ошибка в синтаксисе SQL;проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с '' в строке 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;

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

1 Ответ

0 голосов
/ 02 февраля 2019

SET full_name = CONCAT (NEW.fname, '', NEW.lname) WHERE contacts_id = $ contacts_id;

Это недопустимый синтаксис:

  • SET не принимает предложение WHERE (SQL запросы, например SELECT, UPDATE, INSERT)

  • $contacts_idсовершенно неизвестна СУРБД

Вы, кажется, пытаетесь автоматически обновить значение поля full_name value, когда 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;;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...