0

我正在尝试学习网络旅游的简单课程。我试图根据我的需要修改给出的代码。它会通过修改吐出错误:

#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 ''id')、UNIQUE KEY ('email')、KEY ('email'、'pass') ) ENGINE = MYISAM DEFAULT ' 在第 13 行附近使用的正确语法

原始代码:

CREATE TABLE `users` ( 
`id` int(11) NOT NULL auto_increment, 
`username` varchar(30) NOT NULL default '', 
`password` varchar(255) NOT NULL default '', 
`email` varchar(40) NOT NULL default '', 
`msn` varchar(250) NOT NULL default 'Not Specified', 
`aim` varchar(250) NOT NULL default 'Not Specified', 
`location` varchar(36) NOT NULL default 'Not Specified', 
PRIMARY KEY (`id`) 
) TYPE=MyISAM; 

我的编辑:

CREATE TABLE `users` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
type ENUM( 'member' , 'admin' ) NOT NULL ,
`username` varchar(30) NOT NULL default '',
`password` varchar(255) NOT NULL default '',
`first_name` varchar (15) NOT NULL,
`last_name` varchar (30) NOT NULL,
`gender` ENUM('male',  'female') NOT NULL default 'male',
`email` varchar(50) NOT NULL default '',
`skype` varchar(50) NOT NULL default 'Not Specified',
`facebook` varchar(150) NOT NULL default 'Not Specified',
`location` varchar(100) NOT NULL default 'Not Specified',
PRIMARY KEY ('id'),
UNIQUE KEY ('email'),
KEY ('email', 'pass')
) ENGINE = MYISAM DEFAULT CHARSET = utf8;
4

2 回答 2

2

您正在混淆反引号和引号。这是生活的一般规则:反引号用于包围表结构(表名、表列、约束名等)。引号用于将行括起来- 也就是输入到表中的实际数据。除非指定默认值,否则不会在 DDL 语句中使用引号。

您的错误在于语句中的主键、唯一键和索引键。

PRIMARY KEY ('id'),
UNIQUE KEY ('email'),
KEY ('email', 'pass')

应该是(注意反引号):

PRIMARY KEY (`id`),
UNIQUE KEY (`email`),
KEY (`email`, `password`)

另请注意,您的索引指的是不存在的列pass- 我已将其更改为正确的列password

于 2013-04-14T17:28:34.927 回答
1

你对反引号发疯了

default '',

两个单引号是空字符串 BackTicks 用于列名,例如

My Strange column name

于 2013-04-14T11:29:17.720 回答