Xóa dữ liệu trùng lặp mysql

Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách loại bỏ các hàng trùng lặp trong cơ sở dữ liệu MySQL để giảm kích thước cơ sở dữ liệu và giúp tăng hiệu suất của máy chủ

Trước khi tiếp tục, chúng tôi giả sử

  1. Bạn đã cài đặt và chạy MySQL trên hệ thống của mình
  2. Bạn có quyền truy cập root vào cơ sở dữ liệu
  3. Bạn có quyền truy cập vào cơ sở dữ liệu để thử nghiệm hoặc thử nghiệm

GHI CHÚ. Nếu bạn cần cơ sở dữ liệu mẫu để thử các khái niệm được cung cấp trong hướng dẫn này, vui lòng xem xét cơ sở dữ liệu Sakila hoặc tải xuống bản sao của cơ sở dữ liệu được sử dụng trong hướng dẫn này

Tài nguyên được cung cấp dưới đây

Sử dụng cơ bản

Trước khi bắt đầu, chúng tôi sẽ cố tình tạo một bảng chứa các giá trị trùng lặp cho mục đích thử nghiệm. Các truy vấn SQL để thực hiện hành động này ở bên dưới

SỬ DỤNG thế giới;
DROP TABLE IF EXISTS người dùng;
TẠO BẢNG người dùng (id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, tên người dùng VARCHAR(10) NOT NULL, full_name VARCHAR(20), email VARCHAR(255) NOT NULL);
CHÈN VÀO người dùng (username, full_name, email) GIÁ TRỊ
("trinh nữ", "Claude M. Mori", "claude@gmail. com"),
("pulsa", "Tiffany G. bailey", "tiffany. g@hotmail. com"),
("tên lửa", "Christopher S. Payton", "chris. p@llc. io"),
("vật chất tối", "Patricia J. Cáo", "foxg@yahoo. com"),
("pwnc", "Faye H. Hartley", "hartley@outlook. com"),
("vật chất tối", "Patricia J. Cáo", "foxg@yahoo. com"),
("tên lửa", "Christopher S. Payton", "chris. p@llc. io"),
("artemis", "Wesley C. Dillard", "Wes@dillard. tổ chức");

Vui lòng sửa đổi truy vấn ở trên để phù hợp với nhu cầu của bạn. Bạn cũng nên đảm bảo rằng bạn đã tạo cơ sở dữ liệu (thế giới) để tránh lỗi

Bây giờ, nếu chúng tôi lấy tất cả dữ liệu bên trong bảng và sắp xếp theo tên người dùng, chúng tôi sẽ thấy các bản sao mà chúng tôi có như được hiển thị

mysql> sử dụng thế giới;
Cơ sở dữ liệu đã thay đổi
mysql> CHỌN * TỪ người dùng ĐẶT HÀNG THEO tên người dùng;
+------+---------+-----------------------+-------
Tôi. tên tài khoản. Họ và tên. e-mail
+------+---------+-----------------------+-------
số 8. artemis. Wesley C. thì là. Wes@dillard. tổ chức
4. vật chất tối. Patricia J. cáo. cáog@yahoo. com
6. vật chất tối. Patricia J. cáo. cáog@yahoo. com
2. sao xung. tiffany g. bailey. tiffany. g@hotmail. com
5. pwnc. Faye H. Hartley. hartley@outlook. com
3. tên lửa. Christopher S. Payton. chris. p@llc. io
7. tên lửa. Christopher S. Payton. chris. p@llc. io
1. Xử Nữ. Claudia M. Mori. claude@gmail. com
+------+---------+-----------------------+-------

Như bạn có thể thấy từ bảng trên, chúng tôi có hai giá trị trùng lặp làm cho cơ sở dữ liệu lớn hơn mà không có lý do và gây ra tốc độ chậm

Bây giờ chúng ta hãy tìm hiểu cách chúng ta có thể xóa các giá trị này

#1 – XÓA THAM GIA

Một cách để loại bỏ các hàng trùng lặp trong cơ sở dữ liệu là sử dụng câu lệnh MySQL DELETE JOIN. Tuy nhiên, truy vấn sử dụng id để xóa các giá trị trùng lặp

Ví dụ: để xóa các giá trị trùng lặp trong bảng người dùng ở trên, chúng ta có thể nhập

XÓA  bảng1 TỪ bảng người dùng 1 INNER THAM GIA bảng người dùng 2 WHERE bảng1. id < bảng2. id VÀ bảng1. email = bảng2. e-mail;

Khi bạn thực hiện truy vấn ở trên, bạn sẽ xóa các giá trị trùng lặp như được hiển thị trong kết quả bên dưới

mysql> XÓA bảng1 TỪ bảng người dùng1 INNER THAM GIA bảng người dùng2 WHERE bảng1. id < bảng2. id VÀ bảng1. email = bảng2. e-mail;
Truy vấn OK, 2 hàng bị ảnh hưởng (0. 01 giây)
 
mysql> CHỌN * TỪ người dùng ĐẶT HÀNG THEO tên người dùng;
+------+---------+-----------------------+-------
Tôi. tên tài khoản. Họ và tên. e-mail
+------+---------+-----------------------+-------
số 8. artemis. Wesley C. thì là. Wes@dillard. tổ chức
6. vật chất tối. Patricia J. cáo. cáog@yahoo. com
2. sao xung. tiffany g. bailey. tiffany. g@hotmail. com
5. pwnc. Faye H. Hartley. hartley@outlook. com
7. tên lửa. Christopher S. Payton. chris. p@llc. io
1. Xử Nữ. Claudia M. Mori. claude@gmail. com
+------+---------+-----------------------+-------

#2 – Hàm Row_Number()

Phương pháp thứ hai chúng ta có thể thực hiện là sử dụng hàm row_number() của MySQL. Chức năng này được hỗ trợ trong MySQL phiên bản 8 trở lên

Nó hoạt động bằng cách gán một giá trị int tuần tự cho mỗi hàng, với các hàng chứa các giá trị trùng lặp nhận giá trị cao hơn 1

Để tìm hiểu thêm về chức năng này, hãy sử dụng tài nguyên được cung cấp bên dưới

Xem xét truy vấn bên dưới trả về id của các hàng có giá trị trùng lặp

CHỌN id TỪ (CHỌN id, ROW_NUMBER() QUÁ (PHẦN PHẦN THEO tên người dùng ĐẶT HÀNG THEO tên người dùng) NHƯ row_var TỪ người dùng) t1 WHERE row_var > 1;

Khi bạn thực hiện truy vấn trên, bạn sẽ nhận được danh sách id như được hiển thị trong đầu ra bên dưới

+----+
Tôi
+----+
6
7
+----+
2 hàng trong bộ (0. 01 giây)

Nếu bạn muốn loại bỏ các giá trị, chỉ cần thay câu lệnh SELECT bằng câu lệnh DELETE như hình bên dưới

XÓA KHỎI người dùng WHERE id IN (CHỌN id TỪ ( SELECT id, ROW_NUMBER() QUÁ (PHẦN PHẦN THEO tên người dùng ĐẶT HÀNG THEO tên người dùng) NHƯ row_var TỪ người dùng) t1 WHERE row_var > 1);

Cuối cùng, bạn có thể xác minh rằng các giá trị trùng lặp đã bị xóa bằng cách sử dụng câu lệnh SELECT

mysql> CHỌN * từ người dùng ĐẶT HÀNG THEO tên người dùng;
+------+---------+-----------------------+-------
Tôi. tên tài khoản. Họ và tên. e-mail
+------+---------+-----------------------+-------
số 8. artemis. Wesley C. thì là. Wes@dillard. tổ chức
4. vật chất tối. Patricia J. cáo. cáog@yahoo. com
2. sao xung. tiffany g. bailey. tiffany. g@hotmail. com
5. pwnc. Faye H. Hartley. hartley@outlook. com
3. tên lửa. Christopher S. Payton. chris. p@llc. io
1. Xử Nữ. Claudia M. Mori. claude@gmail. com
+------+---------+-----------------------+-------

Phần kết luận

Trong hướng dẫn này, chúng ta đã thảo luận về hai phương pháp loại bỏ các giá trị trùng lặp khỏi cơ sở dữ liệu. Cơ sở dữ liệu lớn, đặc biệt là những cơ sở dữ liệu được sử dụng phổ biến, có thể chứa nhiều giá trị trùng lặp từ nhập bên ngoài và các lỗi khác. Do đó, cần phải tiếp tục xóa các giá trị trùng lặp để đảm bảo rằng các ứng dụng hoạt động tối ưu

Làm cách nào để xóa các hàng trùng lặp trong MySQL mà không cần sử dụng bảng tạm thời?

Truy vấn SQL để loại bỏ các hàng trùng lặp . tên = e2. tên VÀ e1. id > e2. Tôi;

Làm cách nào để xóa các bản ghi trùng lặp?

Nếu một bảng có các hàng trùng lặp, chúng ta có thể xóa nó bằng cách sử dụng câu lệnh DELETE. Trong trường hợp, chúng tôi có một cột, đây không phải là một phần của nhóm được sử dụng để đánh giá các bản ghi trùng lặp trong bảng