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;