sql >> Base de Datos >  >> RDS >> Mysql

limpiando db de datos redundantes

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;