0

テーブルに 2 つ以上の一意のフィールドを含めることはできませんか、それともここで何か間違っていますか?

ユーザー名用の一意のキーが 1 つあり、メール用にもそれが必要ですが、

#1062 - Duplicate entry '' for key 'email'

alter table users
add unique (email)

表:

`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(255) NOT NULL,
`password` varchar(40) NOT NULL,
`email` varchar(100) NOT NULL,
`registered` int(11) unsigned NOT NULL DEFAULT '0',
`is_active` tinyint(1) NOT NULL DEFAULT '1',
 PRIMARY KEY (`id`),
 UNIQUE KEY `username` (`username`)
4

5 に答える 5

4

これは、メール フィールドに一意でないエントリ、つまり値 '' (空の文字列) が既にあることを示しています。

于 2009-09-01T23:12:22.193 に答える
2

複数の行の列に同じ値 (つまり'') があります。emailつまりUNIQUE、その列に制約を課すことはできません。

列をヌル可能にしてから、現在の値を NULL に更新し、それに対して制約を''作成することができます。UNIQUEUNIQUE

ALTER TABLE users MODIFY email VARCHAR(100);

UPDATE users SET email = NULL WHERE email = '';

ALTER TABLE users ADD UNIQUE KEY (email);

ところで、なぜ''メール列に値があるのですか? 有効な電子メール アドレスではありません。

于 2009-09-01T23:14:22.190 に答える
1

これは、(少なくとも) 2 つのレコードに空の電子メールがあることを意味します。

覚えておいてください: NULL != ''

それらを見つけるには:

SELECT id FROM users WHERE email= '';
于 2009-09-01T23:14:45.823 に答える
0

複数の一意のフィールドを持つことができます。

エラーは、メール フィールドのデータについて不平を言っていると思います。(値が '' の行が複数あると思います)

于 2009-09-01T23:13:33.847 に答える
0

値がない場合も一意と見なされるため、一意の基準で判断する場合、何もない 2 つの電子メール行は重複します。

于 2009-09-01T23:14:40.787 に答える