Thêm chỉ mục duy nhất trên vị trí bảng để không có bản ghi trùng lặp nào được chèn vào
ALTER IGNORE TABLE location ADD UNIQUE KEY ix1(country, city);
Thao tác này sẽ tự động xóa các bản ghi trùng lặp khỏi bảng và đối với các truy vấn chèn trong tương lai, bạn cần sử dụng INSERT IGNORE
để tránh mắc lỗi trùng lặp.
nhưng theo đề xuất của @AD7six
trong nhận xét, nó có thể không hoạt động trên các phiên bản MySQL 5.1.41,5.5.1-m2, 6.0
:xem lỗi tại đây
hoặc cách an toàn thay thế để loại bỏ các bản sao bằng cách sử dụng DELETE
truy vấn:
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;
để đặt lại các giá trị của auto_increment
cột locid
, bạn chỉ có thể thả primary key
trên locid
và tạo lại nó:
ALTER TABLE location DROP column locid;
ALTER TABLE location
ADD COLUMN locid INT unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
hoặc cách thay thế để đặt lại các giá trị của locid
sử dụng UPDATE
truy vấn:
SET var_locid = 0;
UPDATE location
SET locid = (@var_locid := @var_locid + 1)
ORDER BY locid ASC;