2009-09-01 8 views
0

Pouvez-vous ne pas avoir plus de 2 champs uniques dans un tableau ou est-ce que je fais quelque chose de mal ici?Impossible de rendre le champ unique!

Je 1 clé unique pour nom d'utilisateur et je veux pour le courrier électronique aussi, mais j'obtenir

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

alter table users 
add unique (email) 

Tbl:

`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`) 

Répondre

4

Il vous dit que vous avez déjà non entrées uniques dans le champ email, à savoir, la valeur '' (chaîne vide)

0

Vous pouvez avoir plusieurs champs uniques.

Je pense que l'erreur se plaint des données dans le champ de courrier électronique. (Je pense que vous avez plus d'une ligne avec une valeur de '')

2

Vous avez la même valeur (c'est-à-dire '') dans la colonne email sur plusieurs lignes. Cela signifie que vous ne pouvez pas mettre une contrainte UNIQUE sur cette colonne.

Vous pouvez rendre la colonne NULL, puis mettre à jour la valeur NULL où il est actuellement '', puis créer une contrainte UNIQUE, car UNIQUE permet nulls.

ALTER TABLE users MODIFY email VARCHAR(100); 

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

ALTER TABLE users ADD UNIQUE KEY (email); 

BTW, pourquoi avez-vous la valeur '' dans la colonne e-mail? Ce n'est pas une adresse e-mail valide.

+1

et c'est pourquoi le projet de loi a 30k points et j'ai 5. – SquareCog

+0

Je ne sais pas - vos points en moyenne par réponse est 36.22. Mes points moyens par réponse sont de 30,51. –

0

Aucune valeur n'est également considérée comme unique, donc deux lignes d'email avec rien sont dupliquées, si elles doivent être jugées par un standard unique.

1

Cela signifie que (au moins) 2 enregistrements ont un e-mail vide.

Rappelez-vous: NULL = ''

Pour les trouver:

SELECT id FROM users WHERE email= ''; 
Questions connexes