Ajouter un index unique sur l'emplacement de la table afin qu'aucun enregistrement en double ne soit inséré
ALTER IGNORE TABLE location ADD UNIQUE KEY ix1(country, city);
Cela supprimera automatiquement les enregistrements en double de la table et pour les futures requêtes d'insertion, vous devrez utiliser INSERT IGNORE
clause pour éviter d'avoir des erreurs en double.
mais comme suggéré par @AD7six
dans les commentaires, cela pourrait ne pas fonctionner sur les versions de MySQL 5.1.41,5.5.1-m2, 6.0
:voir le bogue ici
ou un autre moyen sûr de supprimer les doublons en utilisant DELETE
requête :
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;
pour réinitialiser les valeurs de auto_increment
colonne locid
, vous pouvez simplement déposer la primary key
sur locid
et recréez-le :
ALTER TABLE location DROP column locid;
ALTER TABLE location
ADD COLUMN locid INT unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
ou un autre moyen de réinstaller les valeurs de locid
en utilisant UPDATE
requête :
SET var_locid = 0;
UPDATE location
SET locid = (@var_locid := @var_locid + 1)
ORDER BY locid ASC;