I try create trigger
CREATE TRIGGER `aster_users2` after
update ON `aster_users` FOR EACH ROW
BEGIN update event set flag=1 where
id=1; END;
You can either:
drop BEGIN
and END
(is only possible when there's a single statement in the body):
CREATE TRIGGER `aster_users2` after
update ON `aster_users` FOR EACH ROW
update event set flag=1 where id=1;
or
add the DELIMITER specifier for the entire CREATE TRIGGER
statement:
DELIMITER |
CREATE TRIGGER `aster_users2` after
update ON `aster_users` FOR EACH ROW
BEGIN
update event set flag=1 where id=1;
END|
DELIMITER ;
Note the second DELIMITER
, which restores the default statement delimiter.
EDIT – Explanation:
Generally you are using ;
to delimit statements. But when it comes to compound statements like CREATE TRIGGER
, which use BEGIN/END
and allow you to include multiple statements in their bodies, the parser needs a way to distinguish the delimiters between the body's statements from the delimiter after the entire compound statement.
Thus you need to either refrain somehow from using ;
inside the compound statement or tell the parser that the compound statement will use a different delimiter. The first option can also be achieved if you just drop ;
before END
, like @p.campbell has suggested.
Try removing the semi-colons from your statements.
If you'd like to keep your semi-colons,
DELIMITER $$
CREATE TRIGGER `aster_users2` after
update ON `aster_users` FOR EACH ROW
BEGIN update event set flag=1 where
id=1;
END$$
DELIMITER ;
Delimiters should be used.
DELIMITER $$
CREATE TRIGGER `aster_users2` AFTER
UPDATE ON `aster_users` FOR EACH ROW
BEGIN
UPDATE event
SET
flag = 1
WHERE
id = 1;
END$$
DELIMITER ;