Ik zou het op de volgende manier doen:
-
Maak een tijdelijke tafel van uw bestaande tafel:
CREATE TEMPORARY TABLE data_to_keep LIKE table_with_dupes_in_it
-
Vul de tijdelijke tabel met alleen de records die u wilt:
INSERT INTO data_to_keep SELECT DISTINCT * FROM table_with_dupes_in_it
-
Maak de tafel leeg
TRUNCATE TABLE table_with_dupes_in_it
-
Zet de gegevens van de tijdelijke tabel terug naar de originele tabel
INSERT INTO table_with_dupes_in_it SELECT * FROM data_to_keep;
-
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.