创建 MySQL 触发器的 SQL 语法错误

发布于 2024-11-03 18:44:18 字数 313 浏览 0 评论 0原文

我尝试创建触发器

CREATE TRIGGER `aster_users2` after
update ON `aster_users` FOR EACH ROW
BEGIN  update event set flag=1 where
id=1; END;

但出现下一个错误

错误 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在第 6 行附近“结束”处使用的正确语法

是否有解决此问题的建议?

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;

but got next error

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'end' at line 6

have suggestion to solve this problem ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

陈甜 2024-11-10 18:44:18

尝试从语句中删除分号。

如果您想保留分号,

DELIMITER $
CREATE TRIGGER `aster_users2` after
update ON `aster_users` FOR EACH ROW
BEGIN  update event set flag=1 where
id=1;  
 END$
DELIMITER ;

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 ;
眉目亦如画i 2024-11-10 18:44:18

您可以:

  • 删除BEGINEND(仅当正文中有单个语句时才可能):

    创建触发器 `aster_users2` 之后
    更新每一行的 `aster_users`
    更新事件集标志 = 1,其中 id = 1;
    

  • 添加DELIMITER说明符整个CREATE TRIGGER语句:

    <前><代码>分隔符|
    之后创建触发器“aster_users2”
    更新每一行的 `aster_users`
    开始
    更新事件集标志 = 1,其中 id = 1;
    结束|
    分隔符;

    请注意第二个 DELIMITER,它会恢复默认语句分隔符。

编辑 – 说明:

通常您使用 ; 来分隔语句。但是,当涉及像 CREATE TRIGGER 这样使用 BEGIN/END 并允许您在其主体中包含多个语句的复合语句时,解析器需要一种方法来区分分隔符整个复合语句之后的正文语句之间的分隔符。

因此,您需要以某种方式避免在复合语句中使用 ; 或告诉解析器复合语句将使用不同的分隔符。如果您只需在 END 之前删除 ; 也可以实现第一个选项,例如 @p.campbell 已建议。

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.

心是晴朗的。 2024-11-10 18:44:18

应使用分隔符。

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 ;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文