error in your SQL syntax creating MySQL trigger

前端 未结 3 1500
生来不讨喜
生来不讨喜 2021-01-12 14:03

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;
相关标签:
3条回答
  • 2021-01-12 14:29

    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.

    0 讨论(0)
  • 2021-01-12 14:33

    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 ;
    
    0 讨论(0)
  • 2021-01-12 14:38

    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 ;
    
    0 讨论(0)
提交回复
热议问题