sql >> Database >  >> RDS >> Mysql

Dubbele rijen verwijderen in een MySQL-database

Ik zou het op de volgende manier doen:

  1. Maak een tijdelijke tafel van uw bestaande tafel:

    CREATE TEMPORARY TABLE data_to_keep LIKE table_with_dupes_in_it
    
  2. Vul de tijdelijke tabel met alleen de records die u wilt:

    INSERT INTO data_to_keep
    SELECT DISTINCT * FROM table_with_dupes_in_it
    
  3. Maak de tafel leeg

    TRUNCATE TABLE table_with_dupes_in_it
    
  4. Zet de gegevens van de tijdelijke tabel terug naar de originele tabel

    INSERT INTO table_with_dupes_in_it
    SELECT * FROM data_to_keep;
    
  5. Opruimen

    DROP TEMPORARY TABLE data_to_keep
    

Houd er rekening mee dat dit een enorme hoeveelheid geheugen en/of opslagruimte kan kosten als de tafel in kwestie een grote is. Als het een grote tafel is, zou ik geneigd zijn om een ​​echte tafel te gebruiken in plaats van een tijdelijke tafel om niet te veel geheugen op je DB-server op te eten.

EDIT TO TOEVOEGEN:

Als u zich alleen zorgen maakt over gedeeltelijke dupes (rijen waar slechts een deel van de gegevens identiek is aan eerder ingevoerde gegevens), dan wilt u GROUP BY gebruiken. Wanneer u GROUP BY gebruikt, kunt u MySQL beperken om slechts één rij te retourneren die bepaalde gegevens bevat in plaats van allemaal.

SELECT *
FROM table
GROUP BY column_name

U zou ook moeten overwegen om UNIEKE indexen te gebruiken op de kolommen waar u geen dubbele gegevens wilt bevatten, dit zal voorkomen dat gebruikers in de eerste plaats dubbele gegevens invoegen.



  1. MySQL:Selecteer vorige maand en maand ervoor

  2. Hoe voorkom je dat een impasse op één knooppunt het hele cluster laat crashen?

  3. Hoe u SQL Server-gebeurtenissen vastlegt en analyseert

  4. Databaseschema, automatisch verhogen