Tôi sẽ làm theo cách sau:
-
Tạo một bảng tạm thời từ bảng hiện có của bạn:
CREATE TEMPORARY TABLE data_to_keep LIKE table_with_dupes_in_it
-
Điền vào bảng tạm thời chỉ với các bản ghi bạn muốn:
INSERT INTO data_to_keep SELECT DISTINCT * FROM table_with_dupes_in_it
-
Làm trống bảng
TRUNCATE TABLE table_with_dupes_in_it
-
Trả dữ liệu từ bảng tạm thời về bảng ban đầu
INSERT INTO table_with_dupes_in_it SELECT * FROM data_to_keep;
-
Dọn dẹp
DROP TEMPORARY TABLE data_to_keep
Hãy lưu ý rằng điều này có thể ngốn một lượng lớn bộ nhớ và / hoặc dung lượng lưu trữ nếu bảng được đề cập là một bảng lớn. Nếu đó là một bảng lớn, tôi sẽ có xu hướng sử dụng bảng thực thay vì bảng tạm thời để không chiếm quá nhiều bộ nhớ trên máy chủ DB của bạn.
CHỈNH SỬA ĐỂ THÊM:
Nếu bạn chỉ lo lắng về lỗi sai một phần (các hàng chỉ một số dữ liệu giống với dữ liệu đã nhập trước đó) thì bạn sẽ muốn sử dụng GROUP BY. Khi bạn sử dụng GROUP BY, bạn có thể giới hạn MySQL chỉ trả về một hàng có chứa dữ liệu nhất định thay vì tất cả chúng.
SELECT *
FROM table
GROUP BY column_name
Bạn cũng nên cân nhắc sử dụng các chỉ mục DUY NHẤT trên các cột bạn muốn để không chứa dữ liệu trùng lặp, điều này sẽ ngăn người dùng chèn dữ liệu trùng lặp ngay từ đầu.