Вы можете либо:
drop BEGIN
и END
(возможно только при наличии одного оператора в теле):
CREATE TRIGGER `aster_users2` after
update ON `aster_users` FOR EACH ROW
update event set flag=1 where id=1;
или
добавить спецификатор DELIMITER для всего оператора CREATE TRIGGER
:
DELIMITER |
CREATE TRIGGER `aster_users2` after
update ON `aster_users` FOR EACH ROW
BEGIN
update event set flag=1 where id=1;
END|
DELIMITER ;
Обратите внимание на второй DELIMITER
, который восстанавливает разделитель оператора по умолчанию.
EDIT - Объяснение:
Как правило, вы используете ;
для разделения операторов.Но когда дело доходит до составных операторов, таких как CREATE TRIGGER
, которые используют BEGIN/END
и позволяют включать в свои тела несколько операторов, синтаксическому анализатору необходим способ отличить разделители между операторами тела от разделителя после всего составного оператора.
Таким образом, вам нужно либо как-то воздержаться от использования ;
внутри составного оператора, либо сообщить парсеру, что составной оператор будет использовать другой разделитель.Первый вариант также может быть достигнут, если вы просто уроните ;
до END
, как предложено @p.campbell.