Aggiungi un indice univoco nella posizione della tabella in modo che non vengano inseriti record duplicati
ALTER IGNORE TABLE location ADD UNIQUE KEY ix1(country, city);
Ciò rimuoverà automaticamente i record duplicati dalla tabella e per future query di inserimento è necessario utilizzare INSERT IGNORE
clausola per evitare di ottenere errori duplicati.
ma come suggerito da @AD7six
nei commenti, potrebbe non funzionare sulle versioni di MySQL 5.1.41,5.5.1-m2, 6.0
:vedi il bug qui
o un modo sicuro alternativo per rimuovere i duplicati utilizzando DELETE
domanda:
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;
per ripristinare i valori di auto_increment
colonna locid
, puoi semplicemente rilasciare la primary key
su locid
e ricrealo:
ALTER TABLE location DROP column locid;
ALTER TABLE location
ADD COLUMN locid INT unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
o un modo alternativo per ripristinare i valori di locid
utilizzando UPDATE
domanda:
SET var_locid = 0;
UPDATE location
SET locid = (@var_locid := @var_locid + 1)
ORDER BY locid ASC;