Tambahkan indeks unik pada lokasi tabel sehingga tidak ada catatan duplikat yang akan dimasukkan
ALTER IGNORE TABLE location ADD UNIQUE KEY ix1(country, city);
Ini akan secara otomatis menghapus rekaman duplikat dari tabel dan untuk kueri penyisipan di masa mendatang, Anda perlu menggunakan INSERT IGNORE
klausa untuk menghindari kesalahan duplikat.
tetapi seperti yang disarankan oleh @AD7six
dalam komentar, ini mungkin tidak berfungsi pada versi MySQL 5.1.41,5.5.1-m2, 6.0
:lihat bug di sini
atau cara aman alternatif untuk menghapus duplikat menggunakan DELETE
permintaan:
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;
untuk mengatur ulang nilai auto_increment
kolom locid
, Anda cukup melepaskan primary key
di locid
dan buat ulang:
ALTER TABLE location DROP column locid;
ALTER TABLE location
ADD COLUMN locid INT unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
atau cara alternatif untuk mengatur ulang nilai locid
menggunakan UPDATE
permintaan:
SET var_locid = 0;
UPDATE location
SET locid = (@var_locid := @var_locid + 1)
ORDER BY locid ASC;