Tôi đang cố gắng loại bỏ các bản sao từ một bảng MySQL bằng cách sử dụng ALTER IGNORE TABLE + một phím UNIQUE. Tài liệu MySQL cho biết:MySQL: ALTER IGNORE TABLE cho "Vi phạm ràng buộc toàn vẹn"
IGNORE là một phần mở rộng của MySQL cho SQL chuẩn. Nó kiểm soát cách ALTER TABLE hoạt động nếu có bản sao trên các khóa duy nhất trong bảng mới hoặc nếu cảnh báo xảy ra khi chế độ nghiêm ngặt được bật. Nếu IGNORE không được chỉ định, bản sao sẽ bị hủy bỏ và được khôi phục nếu xảy ra lỗi trùng lặp. Nếu IGNORE được chỉ định, chỉ hàng đầu tiên được sử dụng các hàng có các bản sao trên một khóa duy nhất. Các hàng xung đột khác sẽ bị xóa. Các giá trị không đúng được cắt ngắn thành giá trị chấp nhận được gần nhất.
Khi tôi chạy truy vấn ...
ALTER IGNORE TABLE table ADD UNIQUE INDEX dupidx (field)
... Tôi vẫn nhận được lỗi # 1062 - Duplicate entry 'blabla' cho khóa 'dupidx'.
Trong đó liên kết đến lỗi InnoDB có một cách giải quyết đề nghị để chạy đầu tiên 'thiết lập phiên old_alter_table = 1; 'này làm việc cho! tôi. – Peter
Cảm ơn Peter - điều này dường như đang làm việc cho tôi bây giờ. Không có ý tưởng về vấn đề này - máy dev của tôi là mariadb nhưng khi tôi đã phải chạy trên sản xuất (mysql 5.5) chạy vào này. Stackoverflow này đã lưu lại ngày của tôi! – spidie
Đây có thể là câu trả lời tồi tệ nhất mà tôi từng thấy trên Stack Overflow. Thay đổi công cụ lưu trữ là một cam kết đáng kể trong chính nó với các bảng có kích thước trung bình. Ba truy vấn này có khả năng có thể khóa máy chủ cơ sở dữ liệu trong nhiều giờ. Đây không phải là một giải pháp. – Mikkel