Agregue un índice único en la ubicación de la tabla para que no se inserten registros duplicados
ALTER IGNORE TABLE location ADD UNIQUE KEY ix1(country, city);
Esto eliminará automáticamente los registros duplicados de la tabla y para futuras consultas de inserción, debe usar INSERT IGNORE
cláusula para evitar errores duplicados.
pero como lo sugiere @AD7six
en los comentarios, es posible que no funcione en las versiones de MySQL 5.1.41,5.5.1-m2, 6.0
:vea el error aquí
o una forma segura alternativa de eliminar duplicados usando DELETE
consulta:
DELETE a
FROM location a
LEFT JOIN (
SELECT locid
FROM location
GROUP BY country, city
)b
ON a.locid = b.locid
WHERE b.locid IS NULL;
para restablecer los valores de auto_increment
columna locid
, puede soltar la primary key
en locid
y recrearlo:
ALTER TABLE location DROP column locid;
ALTER TABLE location
ADD COLUMN locid INT unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
o una forma alternativa de reasentar los valores de locid
usando UPDATE
consulta:
SET var_locid = 0;
UPDATE location
SET locid = (@var_locid := @var_locid + 1)
ORDER BY locid ASC;