在创建新的唯一索引时出现“Error Duplicate entry '1-11' for key 'user_image'”错误。该错误与用户图像有关。

7

我的表结构:

CREATE TABLE `userimageview` (
  `user_id` int(11) unsigned NOT NULL,
  `image_id` int(11) unsigned NOT NULL,
  `thumbnail_view` int(10) unsigned NOT NULL,
  `fullsize_view` int(10) unsigned NOT NULL,
  `point` int(10) unsigned NOT NULL,
  KEY `everything` (`user_id`,`image_id`,`thumbnail_view`,`fullsize_view`,`point`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

我将要添加的索引是:
ALTER TABLE `userimageview` ADD UNIQUE `user_image` (`user_id` , `image_id`)

结果:

#1062 - Duplicate entry '1-11' for key 'user_image' 

我该如何添加UNIQUE索引?


1
听起来你有一行违反了你的约束条件。SELECT * FROM userimageview WHERE user_id = 1 AND image_id = 11 - Michael Berkowski
最好的方法是找到所有的重复项:SELECT user_id, image_id, COUNT(*) AS dupes FROM userimageview GROUP BY user_id, image_id HAVING dupes > 1 ORDER BY dupes DESC - Michael Berkowski
哦,是的。你说得对,@Michael。我以为应该有一个结构性错误!请把你的解决方案发布为答案,这样我就可以接受它 :) - Mohammad Naji
我们应该再等5分钟。不管怎样,谢谢你。我整晚都在苦苦挣扎。 - Mohammad Naji
1个回答

13

你新增的UNIQUE约束条件失败了,因为你的表中已经存在违反它的重复行。使用以下查询定位违反约束条件的行。只要这些行存在,就无法添加UNIQUE索引。

SELECT
  user_id, 
  image_id, 
  COUNT(*) AS dupes
FROM userimageview
GROUP BY user_id, image_id
HAVING dupes > 1
ORDER BY dupes DESC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接