#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! Хорошего дня!