Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

limpando db de dados redundantes


Adicione um índice exclusivo no local da tabela para que nenhum registro duplicado seja inserido
ALTER IGNORE TABLE location ADD UNIQUE KEY ix1(country, city);

Isso removerá automaticamente os registros duplicados da tabela e, para futuras consultas de inserção, você precisará usar INSERT IGNORE cláusula para evitar erros duplicados.

mas como sugerido por @AD7six nos comentários, pode não funcionar nas versões do MySQL 5.1.41,5.5.1-m2, 6.0 :veja o erro aqui

ou uma maneira segura alternativa de remover duplicatas usando DELETE inquerir:
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 redefinir valores de auto_increment coluna locid , você pode simplesmente soltar a primary key em locid e recriá-lo:
ALTER TABLE location DROP column locid;
ALTER TABLE location 
      ADD COLUMN locid INT unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;

ou forma alternativa de reinstalar valores de locid usando UPDATE inquerir:
SET var_locid = 0;

UPDATE location
SET locid = (@var_locid := @var_locid + 1)
ORDER BY locid ASC;