1

Datagrip 说并在 mysql 中完美运行以下过程,但是 mysql 命令行和工作台说我的 sql 中有语法错误。为什么是这样?

CREATE PROCEDURE addTag(n VARCHAR(255), d VARCHAR(255))
  BEGIN
    INSERT INTO Tags(name, description) VALUES
      (n, d);
  END;

以下是 mysql workbench 的显示方式:

mysql工作台错误下划线

操作和错误输出如下所示。

创建过程 addTag(n VARCHAR(255), d VARCHAR(255)) BEGIN INSERT INTO Tags(name, description) VALUES (n, d)

错误代码:1064。您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 4 行的 '' 附近使用正确的语法

4

1 回答 1

1

当您在常规 SQL 编辑器中编写查询时,我们需要一种将语句彼此分开的方法。这是由所谓的分隔符完成的。默认分隔符是分号(可更改)。

然而,MySQL 服务器也使用分号来分隔存储程序(存储过程、函数、事件等)中的语句。服务器一次只能处理一个语句,这就是为什么客户端必须将脚本拆分为单独的语句。这是通过使用提到的分隔符来完成的。

现在,当您编写存储程序时,客户端用于拆分服务器语句的分隔符和这些存储程序中的分隔符(都是分号)相互冲突。为了避免这种情况,您可以将客户端分隔符更改为查询中未出现的其他内容(字符串+注释不计算在内)。因此,在每个 (My)SQL 工具中,您都会发现能够更改此分隔符以避免此麻烦。

但是,MySQL Workbench 有一些帮助,即对象编辑器。对于数据库中的每种对象类型,都有一个专门用于管理该对象的对象编辑器。对于存储过程/函数,有一个只允许create procedureorcreate function块的编辑器,因此那里不需要(客户端)分隔符。

于 2016-05-19T06:38:49.723 回答