Truy vấn MySQL xử lý dữ liệu trùng lặp như thế nào?Bộ lọc để loại bỏ báo cáo dữ liệu trùng lặp

MySQLCác truy vấn xử lý dữ liệu trùng lặp như thế nào?Lọc để loại bỏ báo cáo dữ liệu trùng lặp

MySQL Xử lý dữ liệu trùng lặp

Có thể có các bản ghi trùng lặp trong một số bảng dữ liệu MySQL. Trong một số trường hợp, chúng tôi cho phép tồn tại dữ liệu trùng lặp, nhưng đôi khi chúng tôi cũng cần xóa các dữ liệu trùng lặp này.

Trong chương này, chúng tôi sẽ giới thiệu cách ngăn dữ liệu trùng lặp trong bảng dữ liệu và cách xóa dữ liệu trùng lặp trong bảng dữ liệu.


Ngăn dữ liệu trùng lặp trong bảng

Bạn có thể đặt trường được chỉ định trong bảng dữ liệu MySQL là KHÓA CHÍNH hoặc là UNIQUE (duy nhất) Chỉ mục để đảm bảo tính duy nhất của dữ liệu.

Hãy thử một ví dụ: Không có chỉ mục và khóa chính trong bảng dưới đây, vì vậy bảng cho phép nhiều bản ghi trùng lặp.

CREATE TABLE person_tbl
(
    first_name CHAR(20),
    last_name CHAR(20),
    sex CHAR(10)
);

Nếu bạn muốn đặt trường first_name và last_name trong bảng, dữ liệu không thể lặp lại, bạn có thể đặt chế độ khóa chính kép để đặt tính duy nhất của dữ liệu. Nếu bạn đặt khóa chính kép, giá trị mặc định của khóa đó không thể là NULL, nhưng có thể được đặt thành NOT NULL.Như sau:

CREATE TABLE person_tbl
(
   first_name CHAR(20) NOT NULL,
   last_name CHAR(20) NOT NULL,
   sex CHAR(10),
   PRIMARY KEY (last_name, first_name)
);

Nếu chúng ta đặt một chỉ mục duy nhất, thì khi chèn dữ liệu trùng lặp, câu lệnh SQL sẽ không thực thi thành công và gây ra lỗi.

Điểm khác biệt giữa INSERT IGNORE INTO và INSERT INTO là INSERT IGNORE bỏ qua dữ liệu đã có trong CSDL, nếu không có dữ liệu thì nó sẽ chèn dữ liệu mới, còn nếu có dữ liệu thì nó sẽ bỏ qua dữ liệu này.Bằng cách này, dữ liệu hiện có trong cơ sở dữ liệu có thể được bảo toàn và có thể đạt được mục đích của việc chèn dữ liệu vào khoảng trống.

Ví dụ sau sử dụng CHÈN BỎ QUA VÀO, thực thi mà không có lỗi và không chèn dữ liệu trùng lặp vào bảng dữ liệu:

mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
    -> VALUES( 'Jay', 'Thomas');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
    -> VALUES( 'Jay', 'Thomas');
Query OK, 0 rows affected (0.00 sec)

CHÈN BỎ QUA VÀO Khi chèn dữ liệu, sau khi tính duy nhất của bản ghi được thiết lập, nếu chèn dữ liệu trùng lặp thì không trả về lỗi mà chỉ trả về cảnh báo.Và THAY THẾ vào nếu có một bản ghi chính hoặc duy nhất, hãy xóa nó trước.Chèn một bản ghi mới.

Một cách khác để thiết lập tính duy nhất cho dữ liệu của bạn là thêm chỉ mục UNIQUE như sau:

CREATE TABLE person_tbl
(
   first_name CHAR(20) NOT NULL,
   last_name CHAR(20) NOT NULL,
   sex CHAR(10)
   UNIQUE (last_name, first_name)
);

Thống kê dữ liệu trùng lặp

Dưới đây, chúng tôi sẽ đếm số bản ghi trùng lặp của first_name và last_name trong bảng:

mysql> SELECT COUNT(*) as repetitions, last_name, first_name
    -> FROM person_tbl
    -> GROUP BY last_name, first_name
    -> HAVING repetitions > 1;

Câu lệnh truy vấn trên sẽ trả về số lượng bản ghi trùng lặp trong bảng person_tbl.Nói chung, để truy vấn các giá trị trùng lặp, hãy làm như sau:

  • Xác định cột nào có thể chứa các giá trị trùng lặp.
  • Sử dụng COUNT (*) trong danh sách chọn cột để liệt kê các cột đó.
  • Các cột được liệt kê trong mệnh đề GROUP BY.
  • Mệnh đề HAVING đặt số lần lặp lại lớn hơn 1.

lọc dữ liệu trùng lặp

Nếu bạn cần đọc dữ liệu duy nhất, bạn có thể sử dụng từ khóa DISTINCT trong câu lệnh SELECT để lọc dữ liệu trùng lặp.

mysql> SELECT DISTINCT last_name, first_name
    -> FROM person_tbl;

Bạn cũng có thể sử dụng GROUP BY để đọc dữ liệu duy nhất từ ​​một bảng:

mysql> SELECT last_name, first_name
    -> FROM person_tbl
    -> GROUP BY (last_name, first_name);

dữ liệu trùng lặp

Nếu bạn muốn xóa dữ liệu trùng lặp trong bảng dữ liệu, bạn có thể sử dụng câu lệnh SQL sau:

mysql> CREATE TABLE tmp SELECT last_name, first_name, sex
    ->                  FROM person_tbl;
    ->                  GROUP BY (last_name, first_name, sex);
mysql> DROP TABLE person_tbl;
mysql> ALTER TABLE tmp RENAME TO person_tbl;

Tất nhiên, bạn cũng có thể thêm INDEX (chỉ mục) và PRIMAY KEY (khóa chính) trong bảng dữ liệu để xóa các bản ghi trùng lặp trong bảng.Các phương pháp như sau:

mysql> ALTER IGNORE TABLE person_tbl
    -> ADD PRIMARY KEY (last_name, first_name);

Hy vọng Chen Weiliang Blog ( https://www.chenweiliang.com/ ) đã chia sẻ “MySQL truy vấn và xử lý dữ liệu trùng lặp như thế nào?Các câu lệnh lọc và sao chép "sẽ giúp bạn.

Chào mừng bạn đến chia sẻ liên kết của bài viết này:https://www.chenweiliang.com/cwl-499.html

Chào mừng bạn đến với kênh Telegram trên blog của Chen Weiliang để cập nhật những thông tin mới nhất!

🔔 Hãy là người đầu tiên nhận được "Hướng dẫn sử dụng Công cụ AI tiếp thị nội dung ChatGPT" có giá trị trong thư mục trên cùng của kênh! 🌟
📚 Hướng dẫn này chứa đựng giá trị to lớn, 🌟Đây là cơ hội hiếm có, đừng bỏ lỡ! ⏰⌛💨
Chia sẻ và thích nếu bạn thích!
Chia sẻ và thích của bạn là động lực không ngừng của chúng tôi!

 

发表 评论

Địa chỉ email của bạn sẽ không được công bố. 项 已 * 标注

cuộn lên trên cùng