error in your SQL syntax creating MySQL trigger
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 ;
You can either:
drop
BEGIN
andEND
(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.
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 ;