sql >> Databasteknik >  >> RDS >> Mysql

Ta bort dubbletter av rader i en MySQL-databas

Jag skulle göra det på följande sätt:

  1. Skapa en tillfällig tabell från din befintliga tabell:

    CREATE TEMPORARY TABLE data_to_keep LIKE table_with_dupes_in_it
    
  2. Fyll i temptabellen med bara de poster du vill ha:

    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. Returnera data från den tillfälliga tabellen till den ursprungliga tabellen

    INSERT INTO table_with_dupes_in_it
    SELECT * FROM data_to_keep;
    
  5. Städa upp

    DROP TEMPORARY TABLE data_to_keep
    

Observera att detta kan äta upp en enorm mängd minne och/eller lagring om bordet i fråga är stort. Om det är ett stort bord skulle jag vara benägen att använda en riktig tabell istället för en tillfällig tabell för att inte äta upp överdrivna mängder minne på din DB-server.

REDIGERA FÖR ATT LÄGA TILL:

Om du bara är orolig för partiella duperingar (rader där endast en del av uppgifterna är identiska med tidigare inmatade data) så vill du använda GROUP BY. När du använder GROUP BY kan du begränsa MySQL till att endast returnera en rad som innehåller givna data istället för alla.

SELECT *
FROM table
GROUP BY column_name

Du bör också överväga att använda UNIKA index på de kolumner som du inte vill ha dubblettdata, detta kommer att förhindra användare från att infoga dubblettdata i första hand.



  1. datum som kolumnnamn

  2. SQL-syntaxfel - kan inte hitta felet

  3. JSON_DEPTH() – Hitta det maximala djupet för ett JSON-dokument i MySQL

  4. Hur släpper man unikt i MySQL?