Adicione um índice exclusivo no local da tabela para que nenhum registro duplicado seja inserido
ALTER IGNORE TABLE location ADD UNIQUE KEY ix1(country, city);
Isso removerá automaticamente os registros duplicados da tabela e, para futuras consultas de inserção, você precisará usar
INSERT IGNORE
cláusula para evitar erros duplicados. mas como sugerido por
@AD7six
nos comentários, pode não funcionar nas versões do MySQL 5.1.41,5.5.1-m2, 6.0
:veja o erro aqui
ou uma maneira segura alternativa de remover duplicatas usando
DELETE
inquerir: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;
para redefinir valores de
auto_increment
coluna locid
, você pode simplesmente soltar a primary key
em locid
e recriá-lo:ALTER TABLE location DROP column locid;
ALTER TABLE location
ADD COLUMN locid INT unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
ou forma alternativa de reinstalar valores de
locid
usando UPDATE
inquerir:SET var_locid = 0;
UPDATE location
SET locid = (@var_locid := @var_locid + 1)
ORDER BY locid ASC;