0

私はウェブツーリストの簡単なレッスンに従おうとしています。必要に応じて指定されたコードを変更しようとしました。そして、変更するとエラーが発生します:

#1064 - SQL 構文にエラーがあります。''id'), UNIQUE KEY ('email'), KEY ('email', 'pass') ) ENGINE = MYISAM DEFAULT ' at line 13 の近くで使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

元のコード:

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 に答える