我正试着遵循一个简单的教训,在网络旅游。我试着根据我的需要修改代码。它通过修改输出错误:
#1064 -你有一个错误的SQL语法;检查与你的MySQL服务器版本对应的手册,以便在第13行"id",UNIQUE KEY ('email'), KEY ('email', 'pass')) ENGINE = MYISAM DEFAULT '附近使用正确的语法
源自代码:
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;
你把反引号和引号混在一起了。这是要遵循的一般规则:反引号用于括住表结构(表名、表列、约束名等)。引号用于括行值—也就是要输入到表中的实际数据。除非指定默认值,否则不能在DDL语句中使用引号。
你的错误是主键,唯一键和索引键。
PRIMARY KEY ('id'),
UNIQUE KEY ('email'),
KEY ('email', 'pass')
应该是(注意引号):
PRIMARY KEY (`id`),
UNIQUE KEY (`email`),
KEY (`email`, `password`)
还请注意,您的索引引用的是不存在的列pass
-我已将其更改为正确的列password
。
你疯了吗
default '',
两个单引号是空字符串反勾用于列名,例如
My Strange column name