#1062 - 在尝试添加UNIQUE KEY(MySQL)时,为密钥'unique_id'重复输入''

时间:2013-07-24 00:35:12

标签: mysql unique unique-key

我在尝试添加UNIQUE KEY时遇到错误。这就是我想要做的。我有一个名为'unique_id'的列,它是VARCHAR(100)。表中没有定义索引。我收到了这个错误:

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

当我尝试添加UNIQUE键时。这是我在phpMyAdmin中设置它的截图:

enter image description here

这是由phpMyAdmin生成的MySQL查询:

ALTER TABLE  `wind_archive` ADD  `unique_id` VARCHAR( 100 ) NOT NULL FIRST ,
ADD UNIQUE (
`unique_id`
)

我过去遇到过这个问题但从未解决过,所以我只是从头开始重建了这个表。不幸的是,在这种情况下我不能这样做,因为表中已有很多条目。谢谢你的帮助!

6 个答案:

答案 0 :(得分:33)

错误说明了一切:

Duplicate entry '' 

所以运行以下查询:

SELECT unique_id,COUNT(unique_id)
FROM yourtblname
GROUP BY unique_id
HAVING COUNT(unique_id) >1

此查询还会显示问题

SELECT *
FROM yourtblname
WHERE unique_id=''

这将显示存在重复值的位置。您正尝试在具有重复项的字段上创建唯一索引。您需要先解决重复数据,然后添加索引。

答案 1 :(得分:14)

这是我第三次寻找这个问题的解决方案,所以作为参考,我在这里发布答案。

根据数据,我们可以使用带有Alter命令的IGNORE关键字。如果指定了IGNORE,则只对第一行使用唯一键上具有重复项的行,将删除其他冲突行。不正确的值将被截断为最接近的匹配可接受值。

MySQL的IGNORE关键字扩展似乎在某个版本的MySQL上有bug in the InnoDB version

您可以随时转换为MyISAM,IGNORE-ADD索引,然后转换回InnoDB

ALTER TABLE table ENGINE MyISAM;
ALTER IGNORE TABLE table ADD UNIQUE INDEX dupidx (field);
ALTER TABLE table ENGINE InnoDB;

注意,如果您有外键约束,这将无效,您必须先删除它们,然后稍后再添加。

答案 2 :(得分:2)

unique_id获取NULL NOT NULL,它将解决您的问题

答案 3 :(得分:1)

select ID from wind_archive 
where ID not in (select max(ID) from wind_archive group by unique_id) 

这是您在成功添加唯一键之前应从表中删除的内容。 这也适用于添加2列或更多列的唯一键。 例如 -

delete from wind_archive 
where ID in (
select * from (select ID from wind_archive where ID not in (
select max(ID) from wind_archive group by lastName, firstName
) ORDER BY ID
) AS p
);

答案 4 :(得分:0)

当我尝试将新列添加为唯一“之后”我已经创建了一个仅包含博物馆名称的表时,我得到了同样的错误(重复条目''用于键'unique_id')。我想回去为每个博物馆名称添加一个唯一的代码,目的是一次插入一个代码值。我的表计划很糟糕。 我的解决方案是添加新列而不使其独特;然后一次一行输入每个代码的数据;然后更改列结构,使其在以后的条目中是唯一的。幸运的是只有10排。

答案 5 :(得分:0)

因为您在查询中写入,unique_id是NOT NULL并且之前的行都是null并且您希望此列是唯一的,然后在运行此查询之后,您有多个具有相同值的行,这意味着此列是不唯一,那么你必须在查询中将unique_id NOT NULL更改为unique_id NULL。