Cách MySQL xóa các hàng trùng lặp

How Mysql Delete Duplicate Rows



MySQL là một tập dữ liệu quan hệ lưu trữ dữ liệu trong các bảng có các hàng và cột. Tuy nhiên, dữ liệu được lưu trữ trong cơ sở dữ liệu có thể chứa các giá trị trùng lặp do lỗi trong ứng dụng hoặc người dùng.

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ả định:



  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 kiểm tra

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ơ sở dữ liệu được sử dụng trong hướng dẫn này.



Các tài nguyên được cung cấp bên dưới:





Cách sử dụng cơ bản

Trước khi bắt đầu, chúng tôi sẽ cố ý 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 như sau:

SỬ DỤNG thế giới;
RƠI VÃI BÀN NẾU NHƯ TỒN TẠI người dùng;
TẠO RA BÀN người dùng(Tôi NS KHÓA CHÍNH KHÔNG PHẢI VÔ GIÁ TRỊ AUTO_INCREMENT ,tên tài khoản VARCHAR (10) KHÔNG PHẢI VÔ GIÁ TRỊ ,Họ và tên VARCHAR (hai mươi),e-mail VARCHAR (255) KHÔNG PHẢI VÔ GIÁ TRỊ );
CHÈN VÀO TRONG người dùng(tên tài khoản,Họ và tên,e-mail) GIÁ TRỊ
('Xử Nữ', 'Claude M. Mori', '[email được bảo vệ]'),
('nhấn', 'Tiffany G. Bailey', '[email được bảo vệ]'),
('tên lửa', 'Christopher S. Payton', '[email được bảo vệ]'),
('vật chất tối', 'Patricia J. Fox', '[email được bảo vệ]'),
('chủ thể', 'Faye H. Hartley', '[email được bảo vệ]'),
('vật chất tối', 'Patricia J. Fox', '[email được bảo vệ]'),
('tên lửa', 'Christopher S. Payton', '[email được bảo vệ]'),
('artemis', 'Wesley C. Dillard', '[email được bảo vệ]');

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 nhận được tất cả dữ liệu bên trong bảng và theo thứ tự theo tên người dùng, chúng tôi sẽ thấy các bản sao 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> LỰA CHỌN * TỪ người dùng ĐẶT BỞI tên tài khoản;
+ ---- + ------------ + ----------------------- + ------- ---------------- +
|Tôi|tên tài khoản|Họ và tên|e-mail|
+ ---- + ------------ + ----------------------- + ------- ---------------- +
| số 8 |artemis|Wesley C. Dillard|[email được bảo vệ]|
| 4 |vật chất tối|Patricia J. Fox|[email được bảo vệ]|
| 6 |vật chất tối|Patricia J. Fox|[email được bảo vệ]|
| 2 |nhấn|Tiffany G. Bailey|[email được bảo vệ]|
| 5 |chủ thể|Faye H. Hartley|[email được bảo vệ]|
| 3 |tên lửa|Christopher S. Payton|[email được bảo vệ]|
| 7 |tên lửa|Christopher S. Payton|[email được bảo vệ]|
| 1 |Xử Nữ|Claude M. Mori|[email được bảo vệ]|
+ ---- + ------------ + ----------------------- + ------- ---------------- +

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ể loại bỏ những 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 để loại bỏ các giá trị trùng lặp.

Ví dụ: để loại bỏ 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Ỏ Bảng 1 TỪ người dùng table1 BÊN TRONG THAM GIA người dùng table2 Ở ĐÂU table1.id<table2.id table1.email=table2.email;

Khi bạn thực hiện truy vấn ở trên, bạn sẽ loại bỏ 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Ỏ Bảng 1 TỪ người dùng table1 BÊN TRONG THAM GIA người dùng table2 Ở ĐÂU table1.id<table2.id table1.email=table2.email;
Truy vấn OK, 2hàng bị ảnh hưởng(0,01giây)

mysql> LỰA CHỌN * TỪ người dùng ĐẶT BỞI tên tài khoản;
+ ---- + ------------ + ----------------------- + ------- ---------------- +
|Tôi|tên tài khoản|Họ và tên|e-mail|
+ ---- + ------------ + ----------------------- + ------- ---------------- +
| số 8 |artemis|Wesley C. Dillard|[email được bảo vệ]|
| 6 |vật chất tối|Patricia J. Fox|[email được bảo vệ]|
| 2 |nhấn|Tiffany G. Bailey|[email được bảo vệ]|
| 5 |chủ thể|Faye H. Hartley|[email được bảo vệ]|
| 7 |tên lửa|Christopher S. Payton|[email được bảo vệ]|
| 1 |Xử Nữ|Claude M. Mori|[email được bảo vệ]|
+ ---- + ------------ + ----------------------- + ------- ---------------- +

# 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 giá trị int tuần tự cho mỗi hàng, với các hàng chứa 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:

https://dev.mysql.com/doc/refman/8.0/en/window- Chức năng-des Mô tả.html# Chức năng_row-number

Hãy 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:

LỰA CHỌN Tôi TỪ ( LỰA CHỌN Tôi,SỐ LƯỢNG HÀNG()KẾT THÚC( VÁCH NGĂN BẰNG tên người dùng ĐẶT BỞI tên tài khoản) NHƯ row_var TỪ người dùng)t1 Ở ĐÂU 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 |
+ ---- +
2hàng trong bộ (0,01giây)

Nếu bạn muốn xóa các giá trị, chỉ cần thay thế câu lệnh SELECT bằng câu lệnh DELETE như hình dưới đây:

XÓA BỎ TỪ người dùng Ở ĐÂU Tôi TRONG ( LỰA CHỌN Tôi TỪ ( LỰA CHỌN Tôi,SỐ LƯỢNG HÀNG()KẾT THÚC( VÁCH NGĂN BẰNG tên người dùng ĐẶT BỞI tên tài khoản) NHƯ row_var TỪ người dùng)t1 Ở ĐÂU row_var> 1);

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

mysql> LỰA CHỌN * từ người dùng ĐẶT BỞI tên tài khoản;
+ ---- + ------------ + ----------------------- + ------- ---------------- +
|Tôi|tên tài khoản|Họ và tên|e-mail|
+ ---- + ------------ + ----------------------- + ------- ---------------- +
| số 8 |artemis|Wesley C. Dillard|[email được bảo vệ]|
| 4 |vật chất tối|Patricia J. Fox|[email được bảo vệ]|
| 2 |nhấn|Tiffany G. Bailey|[email được bảo vệ]|
| 5 |chủ thể|Faye H. Hartley|[email được bảo vệ]|
| 3 |tên lửa|Christopher S. Payton|[email được bảo vệ]|
| 1 |Xử Nữ|Claude M. Mori|[email được bảo vệ]|
+ ---- + ------------ + ----------------------- + ------- ---------------- +

Phần kết luận

Trong hướng dẫn này, chúng tôi đã thảo luận về hai phương pháp xóa 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ừ việc nhập bên ngoài và các lỗi khác. Do đó, cần phải tiếp tục loại bỏ các giá trị trùng lặp để đảm bảo rằng các ứng dụng hoạt động tối ưu.