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

DB von redundanten Daten bereinigen

Fügen Sie einen eindeutigen Index für die Tabellenposition hinzu, damit keine doppelten Datensätze eingefügt werden

ALTER IGNORE TABLE location ADD UNIQUE KEY ix1(country, city);

Dadurch werden doppelte Datensätze automatisch aus der Tabelle entfernt und für zukünftige Einfügeabfragen müssen Sie INSERT IGNORE verwenden -Klausel, um doppelte Fehler zu vermeiden.

aber wie von @AD7six vorgeschlagen In Kommentaren funktioniert es möglicherweise nicht mit den MySQL-Versionen 5.1.41,5.5.1-m2, 6.0 :Siehe Fehler hier

oder eine alternative sichere Methode zum Entfernen von Duplikaten mit DELETE Abfrage:

DELETE a
FROM location a
     LEFT JOIN (
                SELECT locid
                FROM location
                GROUP BY country, city
               )b
               ON a.locid = b.locid
WHERE b.locid IS NULL;

um Werte von auto_increment zurückzusetzen Spalte locid , können Sie einfach den primary key löschen auf locid und neu erstellen:

ALTER TABLE location DROP column locid;
ALTER TABLE location 
      ADD COLUMN locid INT unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;

oder alternative Möglichkeit, Werte von locid zurückzusetzen mit UPDATE Abfrage:

SET var_locid = 0;

UPDATE location
SET locid = (@var_locid := @var_locid + 1)
ORDER BY locid ASC;