DataGrip和MySql Workbench在存储过程的有效性方面有所不同

DataGrip和MySql Workbench在存储过程的有效性方面有所不同,mysql,mysql-workbench,datagrip,Mysql,Mysql Workbench,Datagrip,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的演示: 动作和错误输出如下所示 创建过程addTag(n VAR

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的演示:

动作和错误输出如下所示

创建过程addTag(n VARCHAR(255),d VARCHAR(255))开始插入标记(名称,描述)值(n,d)


错误代码:1064。您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以了解第4行的“”附近使用的正确语法。当您在常规SQL编辑器中编写查询时,我们需要一种将语句彼此分离的方法。这是由所谓的分隔符完成的。默认分隔符是分号(可更改)

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

现在,当您编写存储程序时,客户端用于拆分服务器语句的分隔符与这些存储程序中的delmiter(均为分号)相互冲突。为了避免这种情况,您可以将客户机分隔符更改为查询中未显示的其他分隔符(字符串+注释不计算在内)。因此,在每一个(我的)SQL工具中,您都会发现可以更改此delmiter以避免此问题


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

希望它需要
分隔符//
。请检查这个@Arulkumar,它成功了。但是为什么mysql需要这样做呢?为什么postgresql或sqlite(在编写触发器时)不要求这样做呢?Tbh,他们不需要这样做让我感到惊讶。同样的原则也适用于任何必须拆分语句的SQL工具。但是默认的分隔符可能不同?