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

Eliminazione di righe duplicate in un database MySQL

Lo farei nel modo seguente:

  1. Crea una tabella temporanea dalla tua tabella esistente:

    CREATE TEMPORARY TABLE data_to_keep LIKE table_with_dupes_in_it
    
  2. Popola la tabella temporanea solo con i record che desideri:

    INSERT INTO data_to_keep
    SELECT DISTINCT * FROM table_with_dupes_in_it
    
  3. Svuota il tavolo

    TRUNCATE TABLE table_with_dupes_in_it
    
  4. Restituisce i dati dalla tabella temporanea alla tabella originale

    INSERT INTO table_with_dupes_in_it
    SELECT * FROM data_to_keep;
    
  5. Pulisci

    DROP TEMPORARY TABLE data_to_keep
    

Tieni presente che questo può consumare un'enorme quantità di memoria e/o spazio di archiviazione se la tabella in questione è grande. Se si tratta di un tavolo grande, sarei propenso a utilizzare un tavolo reale invece di un tavolo temporaneo per non consumare quantità eccessive di memoria sul server DB.

MODIFICA PER AGGIUNGERE:

Se sei solo preoccupato per duplicati parziali (righe in cui solo alcuni dei dati sono identici ai dati inseriti in precedenza), ti consigliamo di utilizzare GROUP BY. Quando usi GROUP BY, puoi limitare MySQL a restituire solo una riga che contiene dati dati invece di tutti loro.

SELECT *
FROM table
GROUP BY column_name

Dovresti anche considerare l'utilizzo di indici UNIQUE sulle colonne in cui non desideri contenere dati duplicati, ciò impedirà agli utenti di inserire dati duplicati in primo luogo.