ТРИГГЕР Mysql ПРИ ОБНОВЛЕНИИ с помощью функций

#mysql #function #triggers #match

#mysql #функция #триггеры #совпадение

Вопрос:

я пытаюсь создать триггер, который обновляет таблицу при изменении другой таблицы… Вот мой код:

 CREATE TRIGGER updpartido AFTER UPDATE ON partidos
ON EACH ROW
    BEGIN
        SET @vgls = SELECT vgoles(NEW.eqvis)
        SET @lgls = SELECT vgoles(NEW.eqloc)
        UPDATE equipos SET gf=@vgls WHERE id=NEW.eqvis
        UPDATE equipos SET gf=@lgls WHERE id=NEW.eqloc
    END
 

Что он должен делать, так это то, что когда я обновляю совпадение, он должен автоматически запускать этот триггер и обновлять цели.

Но это выдает ошибку. Что я делаю не так? Спасибо и хорошего дня …!

Комментарии:

1. @muistoosh short [Ошибка] 1064 — У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом С ‘В КАЖДОЙ СТРОКЕ BEGIN ОБЪЯВИТЬ в vgls int; ОБЪЯВИТЬ в lgls int; УСТАНОВИТЬ в vgls’ в строке 2

Ответ №1:

Я заметил, что в вашем триггере нет никаких завершителей операторов, что вызовет некоторые жалобы, потому что, например, не имеет никакого SET @lgls = SELECT vgoles(NEW.eqloc) UPDATE equipos SET gf=@vgls WHERE id=NEW.eqvis смысла. Итак, вам нужны некоторые точки с запятой в триггере, но вам также нужно пропустить эти точки с запятой мимо синтаксического анализатора, временно изменив разделитель. Вы также используете ON EACH ROW , когда это должно быть FOR EACH ROW :

 delimiter |
CREATE TRIGGER updpartido AFTER UPDATE ON partidos
FOR EACH ROW
    BEGIN
        SET @vgls = SELECT vgoles(NEW.eqvis);
        SET @lgls = SELECT vgoles(NEW.eqloc);
        UPDATE equipos SET gf=@vgls WHERE id=NEW.eqvis;
        UPDATE equipos SET gf=@lgls WHERE id=NEW.eqloc;
    END;
|
delimiter ;
 

Комментарии:

1. Извините, моя ошибка, я забыл о разделителях! Это сработало как шарм! Большое спасибо @muistoosh! Хорошего дня!