Quản lý dữ liệu trùng lặp trong MariaDB
Trong MariaDB, như đã đề cập ở các bài trước, hệ thống cho phép tồn tại các bản ghi và bảng trùng lặp trong một số trường hợp. Một số dữ liệu trùng lặp này thực ra không phải là trùng lặp do chúng có dữ liệu hoặc kiểu đối tượng khác nhau, hoặc do vòng đời và cách lưu trữ riêng biệt của các đối tượng thao tác. Những trường hợp trùng lặp này thường không gây ra vấn đề gì.

Tuy nhiên, trong một số trường hợp, dữ liệu trùng lặp lại gây ra các vấn đề nghiêm trọng. Các bản ghi trùng lặp thường xuất hiện do các hành động ngầm định hoặc do chính sách “mềm” của một số lệnh trong MariaDB. Để kiểm soát vấn đề này, bạn có thể áp dụng một số phương pháp nhằm phát hiện, loại bỏ, và ngăn chặn việc tạo ra các bản ghi trùng lặp.
Các chiến lược và công cụ quản lý dữ liệu trùng lặp trong MariaDB
Có bốn cách chính để xử lý dữ liệu trùng lặp:
Sử dụng JOIN kết hợp với bảng tạm (Temporary Table):
Bài viết này được đăng tại [free tuts .net]
Thực hiện một phép nối bán (semi-join) như INNER JOIN và sau đó loại bỏ các bản ghi trùng lặp tìm được thông qua một bảng tạm.
Sử dụng INSERT...ON DUPLICATE KEY UPDATE:
Khi câu lệnh INSERT...ON DUPLICATE KEY UPDATE phát hiện ra một khóa duy nhất (unique key) hoặc khóa chính (primary key) trùng lặp, nó sẽ thực hiện cập nhật dữ liệu. Lưu ý rằng nếu có nhiều khóa duy nhất trùng lặp, chỉ khóa đầu tiên được cập nhật. Vì vậy, không nên sử dụng phương pháp này trên các bảng có nhiều chỉ mục duy nhất.
Ví dụ:
INSERT INTO add_dupl VALUES (1, 'Apple');
Kết quả sẽ là:
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
-
Nếu không tìm thấy khóa trùng lặp, câu lệnh INSERT...ON DUPLICATE KEY UPDATE sẽ hoạt động như một câu lệnh INSERT thông thường.
Sử dụng DISTINCT:
Câu lệnh DISTINCT giúp loại bỏ các bản ghi trùng lặp trong kết quả của truy vấn SELECT. Cú pháp chung như sau:
SELECT DISTINCT field1, field2, ... FROM table_name [WHERE conditions];
- Khi sử dụng với một biểu thức, DISTINCT sẽ trả về các giá trị duy nhất của biểu thức đó.
- Khi sử dụng với nhiều biểu thức, nó sẽ trả về các tổ hợp duy nhất của các giá trị.
- Lưu ý: DISTINCT không bỏ qua các giá trị NULL, nên các giá trị NULL cũng được xem là duy nhất.
Ví dụ với một biểu thức:
SELECT DISTINCT product_id FROM products WHERE product_name = 'DustBlaster 5000';
Ví dụ với nhiều biểu thức:
SELECT DISTINCT product_name, product_id FROM products WHERE product_id < 30;
Sử dụng INSERT IGNORE:
Câu lệnh INSERT IGNORE báo cho MariaDB hủy bỏ việc chèn bản ghi khi phát hiện dữ liệu trùng lặp.
Ví dụ:
mysql> INSERT IGNORE INTO customer_tbl (LN, FN) VALUES ('Lex', 'Luther');
Ngoài ra, hãy lưu ý rằng có những trường hợp, theo đặc thù của bảng, việc cho phép dữ liệu trùng lặp lại là cần thiết. Do đó, hãy điều chỉnh chiến lược quản lý dữ liệu trùng lặp phù hợp với đặc điểm của dữ liệu trong bảng của bạn.
Kết bài
Việc nắm vững các chiến lược và công cụ quản lý dữ liệu trùng lặp trong MariaDB sẽ giúp bạn tối ưu hóa truy vấn và bảo vệ tính toàn vẹn của dữ liệu. Bằng cách sử dụng JOIN kết hợp bảng tạm, INSERT...ON DUPLICATE KEY UPDATE, DISTINCT, và INSERT IGNORE, bạn có thể kiểm soát và xử lý các bản ghi trùng lặp một cách hiệu quả, từ đó cải thiện hiệu suất hệ thống và đảm bảo dữ liệu được lưu trữ chính xác. Hãy áp dụng những kỹ thuật này vào công việc của bạn để xây dựng các ứng dụng cơ sở dữ liệu mạnh mẽ và tin cậy hơn!