2012-04-24 17 views
6

Mi estructura de la tabla:error Entrada duplicada '1-11' para 'user_image' clave al crear nuevo índice UNIQUE

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; 

El índice que voy a añadir:

ALTER TABLE `userimageview` ADD UNIQUE `user_image` (`user_id` , `image_id`) 

Resultado :

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

¿Cómo debería agregar mi índice UNIQUE?

+1

Parece que tiene una fila que infringe su restricción. 'SELECT * FROM userimageview DONDE user_id = 1 AND image_id = 11' –

+0

Mejor aún, encuentre todos los duplicados:' SELECT user_id, image_id, COUNT (*) AS dupes FROM userimageview GROUP BY user_id, image_id TENIENDO dupes> 1 ORDER BY dupes DESC ' –

+0

Oh, sí. Tienes razón @Michael. ¡Pensé que debería haber un error ESTRUCTURAL! Por favor, publique su solución como una respuesta para que yo pueda aceptarlo :) –

Respuesta

11

Su restricción UNIQUE recién agregada está fallando porque su tabla ya contiene filas duplicadas que la violan. Ubique a los infractores de restricciones con una consulta como la siguiente. No podrá agregar el índice UNIQUE mientras estas filas estén presentes.

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