不能让场地独一无二!

时间:2009-09-01 23:10:11

标签: sql mysql mysql-error-1062

你能不能在一张桌子上有两个以上的独特字段,或者我在这里做错了什么?

我有1个用户名的唯一密钥,我也想要它用于电子邮件,但我得到了

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

5 个答案:

答案 0 :(得分:4)

它告诉你在电子邮件字段中已经有非唯一条目,即值''(空字符串)

答案 1 :(得分:2)

您在多个行的''列中具有相同的值(即email)。这意味着您无法在该列上添加UNIQUE约束。

你可以使列可以为空,然后将值更新为NULL,它当前为'',然后在其上创建UNIQUE约束,因为UNIQUE允许空值。

ALTER TABLE users MODIFY email VARCHAR(100);

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

ALTER TABLE users ADD UNIQUE KEY (email);

顺便说一句,为什么电子邮件列中的值为''?这不是有效的电子邮件地址。

答案 2 :(得分:1)

这意味着(至少)2条记录的电子邮件为空。

记住:NULL!=''

找到它们:

SELECT id FROM users WHERE email= '';

答案 3 :(得分:0)

您可以拥有多个唯一字段。

我认为错误是抱怨电子邮件字段中的数据。 (我认为你有多行的值为'')

答案 4 :(得分:0)

没有任何值也被认为是唯一的,因此如果要通过一个独特的标准判断它们,那么两个没有任何内容的电子邮件行是重复的。