#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册

Posted

技术标签:

【中文标题】#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册【英文标题】:#1064 -You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version 【发布时间】:2014-03-14 22:36:14 【问题描述】:

我是 phpmysql 的新手,在我正在进行的一个学习项目中遇到了一些麻烦。

每当我尝试创建表时

CREATE TABLE transactions(
id int NOT NULL AUTO_INCREMENT,
location varchar(50) NOT NULL,
description varchar(50) NOT NULL,
category varchar(50) NOT NULL,
amount double(10) NOT NULL,
type varchar(6) NOT NULL, 
notes varchar(512),
receipt int(10),
)

我收到以下错误消息:

以获取正确的语法使用 near ') NOT NULL,键入 varchar(6) NOT NULL,注意 varchar(512), 收据 int(10), ' 在第 6 行**

这里有一些关于我正在使用的信息

    服务器类型:MySQL 服务器版本:5.5.32 - MySQL Community Server(GPL) phpMyAdmin:4.0.4.1,最新稳定版本:4.1.7

我花了一天的时间把头撞在墙上,现在我想是时候寻求帮助了。我想知道是否有人能告诉我我做错了什么?

【问题讨论】:

receipt 行的末尾有一个逗号。 【参考方案1】:

去掉逗号

receipt int(10),

还有AUTO INCREMENT应该是一个KEY

double 数据类型还需要小数位精度,因此正确的语法是 double(10,2)

【讨论】:

这个答案部分正确。它没有回答返回的错误消息。 double 数据类型也需要小数位精度,所以正确的语法是 double(10,2)【参考方案2】:

一个明显的事情是你必须在这里删除逗号

receipt int(10),

但实际的问题是因为线

amount double(10) NOT NULL,

改成

amount double NOT NULL,

【讨论】:

这对我有用。为什么我不应该给 double 一个长度? 你问这个问题已经有好几年了,但是对于后代来说,这个工作的原因是你用来给双精度的语法是错误的。您需要以 double(10, 2) 格式给出长度,其中 2 是小数位数。删除长度只是使其使用默认值。【参考方案3】:

在 MySQL 中,单词 'type' 是保留字。

【讨论】:

【参考方案4】:

我看到两个问题:

DOUBLE(10) 精度定义需要总位数,以及小数点后的总位数:

双(10,8) 总共是十位,小数点后允许有 8 位。

另外,您需要将 id 列指定为键:

CREATE TABLE transactions( 
id int NOT NULL AUTO_INCREMENT, 
location varchar(50) NOT NULL, 
description varchar(50) NOT NULL, 
category varchar(50) NOT NULL, 
amount double(10,9) NOT NULL, 
type varchar(6) NOT NULL,  
notes varchar(512), 
receipt int(10), 
PRIMARY KEY(id) );

【讨论】:

【参考方案5】:

规则 1:如果不指定 primary key 约束,则不能添加新表[如果以某种方式创建它,这不是一个好习惯]。 所以代码:

CREATE TABLE transactions( 
id int NOT NULL AUTO_INCREMENT, 
location varchar(50) NOT NULL, 
description varchar(50) NOT NULL, 
category varchar(50) NOT NULL, 
amount double(10,9) NOT NULL, 
type varchar(6) NOT NULL,  
notes varchar(512), 
receipt int(10), 
PRIMARY KEY(id));

规则2:不允许使用关键字(具有预定义含义的词)作为字段名称。 这里的 type 就是这样使用的(通常与 Join Types 一起使用)。 所以代码:

CREATE TABLE transactions( 
id int NOT NULL AUTO_INCREMENT, 
location varchar(50) NOT NULL, 
description varchar(50) NOT NULL, 
category varchar(50) NOT NULL, 
amount double(10,9) NOT NULL, 
transaction_type varchar(6) NOT NULL,  
notes varchar(512), 
receipt int(10), 
PRIMARY KEY(id));

现在请尝试使用此代码。 首先在您的数据库用户界面中检查它(我正在运行 HeidiSQL,或者您也可以在您的 xampp/wamp 服务器中尝试它)并确保此代码有效。现在从您的数据库中删除该表并在您的程序中执行代码。 谢谢。

【讨论】:

【参考方案6】:

我以前遇到过这个问题,对我来说背后的原因是如果没有添加额外的列,应该删除架构定义中的最后一个逗号。

CREATE TABLE users 
    (
         id INT AUTO_INCREMENT PRIMARY KEY,
         username VARCHAR(255) NOT NULL,
         email VARCHAR(255) NOT NULL UNIQUE,
         password VARCHAR(255) NOT NULL,    // this comma should be deleted
    );

【讨论】:

以上是关于#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册的主要内容,如果未能解决你的问题,请参考以下文章

#1064 - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册以获取正确的语法

#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册

1064. 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在附近使用的正确语法

#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在附近使用的正确语法

MySQL #1064 - 您的 SQL 语法 2020 有错误 [重复]

我的 SQL 错误:错误 1064:您的 SQL 语法有错误;