你能不能在一张桌子上有两个以上的独特字段,或者我在这里做错了什么?
我有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`)
答案 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)
没有任何值也被认为是唯一的,因此如果要通过一个独特的标准判断它们,那么两个没有任何内容的电子邮件行是重复的。