Nếu bạn có các bản sao trong bảng của mình và bạn sử dụng
ALTER TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);
truy vấn sẽ không thành công với Lỗi 1062 (khóa trùng lặp).
Nhưng nếu bạn sử dụng IGNORE
-- (only works before MySQL 5.7.4)
ALTER IGNORE TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);
các bản sao sẽ bị loại bỏ. Nhưng tài liệu không chỉ định hàng nào sẽ được giữ:
Nếu phiên bản của bạn là 5.7.4 trở lên - bạn có thể:
- Sao chép dữ liệu vào một bảng tạm thời (về mặt kỹ thuật, nó không cần phải là bảng tạm thời).
- Cắt bớt bảng gốc.
- Tạo CHỈ SỐ DUY NHẤT.
- Và sao chép lại dữ liệu bằng
INSERT IGNORE
(vẫn còn).
CREATE TABLE tmp_data SELECT * FROM mytable;
TRUNCATE TABLE mytable;
ALTER TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);
INSERT IGNORE INTO mytable SELECT * from tmp_data;
DROP TABLE tmp_data;
Cũng xem: CHÈN ... Cú pháp CHỌN và So sánh Từ khóa BỎ QUA và Chế độ SQL nghiêm ngặt