Mysql
 sql >> Base de données >  >> RDS >> Mysql

nettoyer la base de données des données redondantes

Ajouter un index unique sur l'emplacement de la table afin qu'aucun enregistrement en double ne soit inséré

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

Cela supprimera automatiquement les enregistrements en double de la table et pour les futures requêtes d'insertion, vous devrez utiliser INSERT IGNORE clause pour éviter d'avoir des erreurs en double.

mais comme suggéré par @AD7six dans les commentaires, cela pourrait ne pas fonctionner sur les versions de MySQL 5.1.41,5.5.1-m2, 6.0 :voir le bogue ici

ou un autre moyen sûr de supprimer les doublons en utilisant DELETE requête :

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;

pour réinitialiser les valeurs de auto_increment colonne locid , vous pouvez simplement déposer la primary key sur locid et recréez-le :

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

ou un autre moyen de réinstaller les valeurs de locid en utilisant UPDATE requête :

SET var_locid = 0;

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