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

Suppression de lignes en double dans une base de données MySQL

Je le ferais de la manière suivante :

  1. Créez une table temporaire à partir de votre table existante :

    CREATE TEMPORARY TABLE data_to_keep LIKE table_with_dupes_in_it
    
  2. Remplissez la table temporaire avec uniquement les enregistrements souhaités :

    INSERT INTO data_to_keep
    SELECT DISTINCT * FROM table_with_dupes_in_it
    
  3. Vider la table

    TRUNCATE TABLE table_with_dupes_in_it
    
  4. Renvoie les données de la table temporaire à la table d'origine

    INSERT INTO table_with_dupes_in_it
    SELECT * FROM data_to_keep;
    
  5. Nettoyer

    DROP TEMPORARY TABLE data_to_keep
    

Sachez que cela peut consommer une énorme quantité de mémoire et/ou de stockage si la table en question est grande. S'il s'agit d'une grande table, je serais enclin à utiliser une vraie table au lieu d'une table temporaire afin de ne pas consommer des quantités excessives de mémoire sur votre serveur de base de données.

MODIFIER POUR AJOUTER :

Si vous êtes juste préoccupé par les doublons partiels (lignes où seules certaines des données sont identiques aux données saisies précédemment), vous voudrez utiliser GROUP BY. Lorsque vous utilisez GROUP BY, vous pouvez limiter MySQL pour qu'il renvoie une seule ligne contenant des données données au lieu de toutes.

SELECT *
FROM table
GROUP BY column_name

Vous devriez également envisager d'utiliser des index UNIQUE sur les colonnes pour lesquelles vous ne voulez pas contenir de données en double, cela empêchera les utilisateurs d'insérer des données en double en premier lieu.