Dodaj unikalny indeks w lokalizacji tabeli, aby nie wstawiać zduplikowanych rekordów
ALTER IGNORE TABLE location ADD UNIQUE KEY ix1(country, city);
Spowoduje to automatyczne usunięcie zduplikowanych rekordów z tabeli, a dla przyszłych zapytań wstawiania musisz użyć INSERT IGNORE klauzula, aby uniknąć zduplikowanych błędów.
ale zgodnie z sugestią @AD7six w komentarzach może nie działać w wersjach MySQL 5.1.41,5.5.1-m2, 6.0 :zobacz błąd tutaj
lub alternatywny bezpieczny sposób usuwania duplikatów za pomocą DELETE zapytanie:
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;
aby zresetować wartości auto_increment kolumna locid , możesz po prostu upuścić primary key na locid i odtwórz go:
ALTER TABLE location DROP column locid;
ALTER TABLE location
ADD COLUMN locid INT unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
lub alternatywny sposób na zresetowanie wartości locid za pomocą UPDATE zapytanie:
SET var_locid = 0;
UPDATE location
SET locid = (@var_locid := @var_locid + 1)
ORDER BY locid ASC;