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;