#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 【问题描述】:我是 php
和 mysql
的新手,在我正在进行的一个学习项目中遇到了一些麻烦。
每当我尝试创建表时
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 服务器版本相对应的手册,以获取在附近使用的正确语法