Estoy tratando de eliminar duplicados de una tabla MySQL utilizando ALTER IGNORE TABLE + una clave única. La documentación de MySQL dice:MySQL: ALTER IGNORE TABLE da "Integrity constraint violation"
IGNORE es una extensión de MySQL para SQL estándar. Controla cómo funciona ALTER TABLE si hay duplicados en claves únicas en la nueva tabla o si se producen advertencias cuando se habilita el modo estricto. Si no se especifica IGNORE, la copia se cancela y se retrotrae si se producen errores de clave duplicada. Si se especifica IGNORE, solo se usa la primera fila de filas con duplicados en una clave única. Las otras filas conflictivas se eliminan. Los valores incorrectos se truncan al valor aceptable de coincidencia más cercano.
Cuando ejecuto la consulta ...
ALTER IGNORE TABLE table ADD UNIQUE INDEX dupidx (field)
... sigo teniendo el error # 1062 - Duplicar entrada 'blabla' para la llave 'dupidx'.
En ese enlace al error InnoDB hay una solución sugerida para la primera carrera 'set sesión old_alter_table = 1;' Esto funcionó para! yo. – Peter
Gracias Peter - esto parece estar funcionando para mí ahora. No tenía idea de este problema: mi máquina de desarrollo es Mariadb, pero cuando tuve que ejecutar la producción (mysql 5.5) tropecé con esto. ¡Este stackoverflow salvó mi día! – spidie
Esta es posiblemente la peor respuesta aceptada que he visto en Stack Overflow. Cambiar los motores de almacenamiento es una tarea significativa en sí misma, incluso con tablas de tamaño mediano. Estas tres consultas podrían bloquear un servidor de base de datos durante horas. Esto no es nada como una solución. – Mikkel