Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Löschen doppelter Zeilen in einer MySQL-Datenbank

Ich würde es folgendermaßen machen:

  1. Erstellen Sie eine temporäre Tabelle aus Ihrer vorhandenen Tabelle:

    CREATE TEMPORARY TABLE data_to_keep LIKE table_with_dupes_in_it
    
  2. Füllen Sie die temporäre Tabelle nur mit den gewünschten Datensätzen:

    INSERT INTO data_to_keep
    SELECT DISTINCT * FROM table_with_dupes_in_it
    
  3. Leeren Sie die Tabelle

    TRUNCATE TABLE table_with_dupes_in_it
    
  4. Geben Sie die Daten aus der temporären Tabelle in die ursprüngliche Tabelle zurück

    INSERT INTO table_with_dupes_in_it
    SELECT * FROM data_to_keep;
    
  5. Aufräumen

    DROP TEMPORARY TABLE data_to_keep
    

Beachten Sie, dass dies eine große Menge an Speicher und/oder Speicherplatz verschlingen kann, wenn die betreffende Tabelle groß ist. Wenn es sich um eine große Tabelle handelt, würde ich eher eine echte Tabelle anstelle einer temporären Tabelle verwenden, um nicht übermäßig viel Speicher auf Ihrem DB-Server zu verbrauchen.

BEARBEITEN ZUM HINZUFÜGEN:

Wenn Sie sich nur Sorgen um teilweise Dupes machen (Zeilen, bei denen nur einige der Daten mit den zuvor eingegebenen Daten identisch sind), sollten Sie GROUP BY verwenden. Wenn Sie GROUP BY verwenden, können Sie MySQL darauf beschränken, nur eine Zeile zurückzugeben, die bestimmte Daten enthält, anstatt alle.

SELECT *
FROM table
GROUP BY column_name

Sie sollten auch die Verwendung von UNIQUE-Indizes für die Spalten in Betracht ziehen, die keine doppelten Daten enthalten sollen. Dadurch wird verhindert, dass Benutzer überhaupt doppelte Daten einfügen.