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

Mil*_*dia 27 mysql unique unique-key

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

#1062 - Duplicate entry '' for key 'unique_id' 
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

这是由phpMyAdmin生成的MySQL查询:

ALTER TABLE  `wind_archive` ADD  `unique_id` VARCHAR( 100 ) NOT NULL FIRST ,
ADD UNIQUE (
`unique_id`
)
Run Code Online (Sandbox Code Playgroud)

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

Nam*_*ian 36

错误说明了一切:

Duplicate entry '' 
Run Code Online (Sandbox Code Playgroud)

因此,请运行以下查询:

SELECT unique_id,COUNT(unique_id)
FROM yourtblname
GROUP BY unique_id
HAVING COUNT(unique_id) >1
Run Code Online (Sandbox Code Playgroud)

此查询还将向您显示问题

SELECT *
FROM yourtblname
WHERE unique_id=''
Run Code Online (Sandbox Code Playgroud)

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

  • 哦,好的,我现在明白了。是的,这实际上就是我在索引上创建“唯一”值的原因。我不知道错误的确切含义(我多虑了)。非常感谢,这让我指明了正确的方向! (2认同)

RQu*_*ube 15

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

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

IGNOREMySQL 的关键字扩展似乎在某些版本的MySQL上的InnoDB版本中存在错误.

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

ALTER TABLE table ENGINE MyISAM;
ALTER IGNORE TABLE table ADD UNIQUE INDEX dupidx (field);
ALTER TABLE table ENGINE InnoDB;
Run Code Online (Sandbox Code Playgroud)

请注意,如果您有外键约束,这将不起作用,您必须先删除它们,然后稍后再添加它们.


小智 6

Make unique_id NULLfromNOT NULL它将解决您的问题