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

Sletning af duplikerede rækker i en MySQL-database

Jeg ville gøre det på følgende måde:

  1. Opret en midlertidig tabel fra din eksisterende tabel:

    CREATE TEMPORARY TABLE data_to_keep LIKE table_with_dupes_in_it
    
  2. Udfyld den midlertidige tabel med netop de poster, du ønsker:

    INSERT INTO data_to_keep
    SELECT DISTINCT * FROM table_with_dupes_in_it
    
  3. Tøm bordet

    TRUNCATE TABLE table_with_dupes_in_it
    
  4. Returner dataene fra den midlertidige tabel til den oprindelige tabel

    INSERT INTO table_with_dupes_in_it
    SELECT * FROM data_to_keep;
    
  5. Ryd op

    DROP TEMPORARY TABLE data_to_keep
    

Vær opmærksom på, at dette kan optage en enorm mængde hukommelse og/eller lagerplads, hvis det pågældende bord er stort. Hvis det er et stort bord, ville jeg være tilbøjelig til at bruge en rigtig tabel i stedet for en midlertidig tabel for ikke at æde for store mængder hukommelse på din DB-server.

REDIGER FOR TILFØJ:

Hvis du bare er bekymret for delvise duperinger (rækker, hvor kun nogle af dataene er identiske med tidligere indtastede data), så vil du bruge GROUP BY. Når du bruger GROUP BY, kan du begrænse MySQL til kun at returnere én række, der indeholder givne data i stedet for dem alle.

SELECT *
FROM table
GROUP BY column_name

Du bør også overveje at bruge UNIQUE indekser på de kolonner, du ikke ønsker at indeholde duplikerede data, dette vil forhindre brugere i at indsætte duplikerede data i første omgang.



  1. Få optælling af fremmed nøgle fra flere tabeller

  2. mysql ikke unik automatisk stigning, primærnøgle to felter

  3. PHP MySQLi hente array push tilsidesætter data

  4. mysqld-tjenesten stopper en gang om dagen på ec2-serveren