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 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.


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 ;