MySQL 错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解使用 close

问题描述 投票:0回答:6

我有这样的存储过程:

CREATE PROCEDURE ProG()
  BEGIN
    SELECT * FROM `hs_hr_employee_leave_quota`;
  END

但它给出了错误:

#1064
- 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在第 3 行 '' 附近使用的正确语法

这个错误是什么意思?第 2 行有什么问题?

mysql sql database syntax-error mysql-error-1064
6个回答
59
投票

使用触发器、存储过程等之前必须更改分隔符。

delimiter //
create procedure ProG() 
begin 
SELECT * FROM hs_hr_employee_leave_quota;
end;//
delimiter ;

17
投票

如何找出这个 MySQL 错误的意思:

#1064 - You have an error in your SQL syntax;

这个错误没有任何线索。您必须仔细检查所有这些项目,看看您的错误在哪里:

  1. 您遗漏或包含了不必要的符号:
    !@#$%^&*()-_=+[]{}\|;:'",<>/?
  2. 放错位置、缺失或不必要的关键字:
    select
    into
    或无数其他关键字。
  3. 查询中的 unicode 字符看起来像 ascii 字符,但无法识别。
  4. 关键字之间错位、缺失或不必要的空格或换行符。
  5. 不匹配的单引号、双引号、圆括号或大括号。

尽可能多地从损坏的查询中删除,直到它开始工作。然后下次使用具有健全语法报告系统的 PostgreSQL。


6
投票

分隔符,分隔符...

当程序中有多个语句时,您确实需要它们。 (换句话说,你的代码中是否有一个

;
,然后还有更多语句/命令?那么,你需要使用分隔符)。

对于像您这样简单的程序,您可以这样做:

CREATE PROCEDURE ProG()
  SELECT * FROM `hs_hr_employee_leave_quota`;

0
投票

这可能是 mysql 的内存问题 尝试增加 my.ini 中的 max_allowed_packet


0
投票

MYSQL PROCEDURE步骤:

  1. 更改默认的 分隔符 ' ; ' 到 ' // '

分隔符 //

  1. 创建PROCEDURE,可以参考语法

    注意:不要忘记以 ' 结束语句; '

create procedure ProG() 
begin 
SELECT * FROM hs_hr_employee_leave_quota;
end;//
  1. 将分隔符更改回 ' ; '

分隔符;

  1. 现在执行:

调用 ProG();


0
投票

我在下面遇到了同样的错误:

ERROR 1064 (42000):您的 SQL 语法有错误;检查 与您的 MySQL 服务器版本相对应的手册 第 3 行 ')' 附近使用的语法

当使用结尾逗号时,如下所示:

create table person(
  name varchar(50),
);             -- ↑ A trailing comma

所以,我删除了结尾的逗号,如下所示,然后错误就解决了:

create table person(
  name varchar(50)
);             -- ↑ No trailing comma

而且,我也遇到了以下相同的错误:

ERROR 1064 (42000):您的 SQL 语法有错误;检查 与您的 MySQL 服务器版本相对应的手册 在第 1 行的“count( num int )”附近使用的语法

count
(
之间没有空格时,如下所示,因为它被识别为MySQL内置函数count()

            -- No space
                 ↓
create table count(
  num int
);

所以,我在

count
(
之间留了一个空格,如下所示,然后错误就解决了:

          -- Make a space
                  ↓
create table count (
  num int
);

而且,我也遇到了以下相同的错误:

ERROR 1064 (42000):您的 SQL 语法有错误;检查 与您的 MySQL 服务器版本相对应的手册 在第 1 行 'person TO 'john'@'localhost'' 附近使用的语法

当我通过用户 person 登录,通过

GRANT
将所有数据库 (
*.person
) 中的
john
表的 PROCESS 权限授予用户
root
,如下所示:

GRANT PROCESS ON *.person TO 'john'@'localhost';

因此,我对所有数据库中的所有表(

PROCESS
)赋予了
*.*
权限,如下所示,然后我就可以解决该错误。 *我的回答解释更多:

GRANT PROCESS ON *.* TO 'john'@'localhost';
© www.soinside.com 2019 - 2024. All rights reserved.