Mysql
 sql >> Database >  >> RDS >> Mysql

ripulire db di dati ridondanti

Aggiungi un indice univoco nella posizione della tabella in modo che non vengano inseriti record duplicati

ALTER IGNORE TABLE location ADD UNIQUE KEY ix1(country, city);

Ciò rimuoverà automaticamente i record duplicati dalla tabella e per future query di inserimento è necessario utilizzare INSERT IGNORE clausola per evitare di ottenere errori duplicati.

ma come suggerito da @AD7six nei commenti, potrebbe non funzionare sulle versioni di MySQL 5.1.41,5.5.1-m2, 6.0 :vedi il bug qui

o un modo sicuro alternativo per rimuovere i duplicati utilizzando DELETE domanda:

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;

per ripristinare i valori di auto_increment colonna locid , puoi semplicemente rilasciare la primary key su locid e ricrealo:

ALTER TABLE location DROP column locid;
ALTER TABLE location 
      ADD COLUMN locid INT unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;

o un modo alternativo per ripristinare i valori di locid utilizzando UPDATE domanda:

SET var_locid = 0;

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