Voeg een unieke index toe op de tafellocatie zodat er geen dubbele records worden ingevoegd
ALTER IGNORE TABLE location ADD UNIQUE KEY ix1(country, city);
Hiermee worden dubbele records automatisch uit de tabel verwijderd en voor toekomstige invoegquery's moet u INSERT IGNORE
gebruiken clausule om dubbele fouten te voorkomen.
maar zoals voorgesteld door @AD7six
in opmerkingen werkt het mogelijk niet op MySQL-versies 5.1.41,5.5.1-m2, 6.0
:zie bug hier
of alternatieve veilige manier om duplicaten te verwijderen met DELETE
vraag:
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;
om waarden van auto_increment
opnieuw in te stellen kolom locid
, kunt u gewoon de primary key
. laten vallen op locid
en maak het opnieuw:
ALTER TABLE location DROP column locid;
ALTER TABLE location
ADD COLUMN locid INT unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
of alternatieve manier om waarden van locid
opnieuw in te stellen met behulp van UPDATE
vraag:
SET var_locid = 0;
UPDATE location
SET locid = (@var_locid := @var_locid + 1)
ORDER BY locid ASC;