MariaDB - Quản lý các bản sao

MariaDB, như đã thảo luận trong các bài học trước, cho phép các bản ghi và bảng trùng lặp trong một số trường hợp. Một số bản sao trong thực tế không phải là bản sao do dữ liệu hoặc kiểu đối tượng riêng biệt, hoặc do tuổi thọ hoặc lưu trữ duy nhất của đối tượng hoạt động. Các bản sao này thường không gây ra vấn đề gì.

Trong một số tình huống, các bản sao gây ra sự cố và chúng thường xuất hiện do các hành động ngầm hoặc chính sách khoan dung của lệnh MariaDB. Có nhiều cách để kiểm soát vấn đề này, tìm bản sao, xóa bản sao và ngăn tạo bản sao.

Chiến lược và Công cụ

Có bốn cách chính để quản lý các bản sao -

  • Cá cho họ bằng JOIN và xóa chúng bằng một bảng tạm thời.

  • Sử dụng INSERT ... ON DUPLICATE KEY UPDATE để cập nhật khi phát hiện ra bản sao.

  • Sử dụng DISTINCT để lược bỏ kết quả của câu lệnh SELECT và loại bỏ các bản sao.

  • Sử dụng CHÈN BỎ QUA để ngừng chèn các bản sao.

Sử dụng kết hợp với một bảng tạm thời

Đơn giản chỉ cần thực hiện một phép nối bán phần giống như phép nối bên trong, sau đó xóa các bản sao được tìm thấy bằng một bảng tạm thời.

Sử dụng INSERT

Khi INSERT ... ON DUPLICATE KEY UPDATE phát hiện ra một khóa chính hoặc duy nhất trùng lặp, nó sẽ thực hiện cập nhật. Khi phát hiện ra nhiều khóa duy nhất, nó chỉ cập nhật khóa đầu tiên. Do đó, không sử dụng nó trên các bảng có nhiều chỉ số duy nhất.

Xem lại ví dụ sau đây, ví dụ này tiết lộ những gì xảy ra trong bảng chứa các giá trị được lập chỉ mục khi chèn vào trường được điền -

INSERT INTO add_dupl VALUES (1,'Apple');
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

Note - Nếu không tìm thấy khóa, câu lệnh INSERT ... ON DUPLICATE KEY UPDATE sẽ thực hiện giống như một câu lệnh chèn thông thường.

Sử dụng DISTINCT

Các mệnh đề DISTINCT loại bỏ các bản sao khỏi kết quả. Cú pháp chung cho mệnh đề DISTINCT như sau:

SELECT DISTINCT fields
FROM table
[WHERE conditions];

Note - Kết quả của một câu lệnh với mệnh đề DISTINCT -

  • Khi sử dụng một biểu thức, nó trả về các giá trị duy nhất cho nó.

  • Khi sử dụng nhiều biểu thức, nó trả về các kết hợp duy nhất.

  • Nó không bỏ qua các giá trị NULL; do đó, kết quả cũng chứa NULL là giá trị duy nhất.

Xem lại câu lệnh sau bằng mệnh đề DISTINCT cho một biểu thức duy nhất -

SELECT DISTINCT product_id
FROM products
WHERE product_name = 'DustBlaster 5000';

Xem lại ví dụ sau sử dụng nhiều biểu thức -

SELECT DISTINCT product_name, product_id
FROM products
WHERE product_id < 30

Sử dụng CHÈN BỎ QUA

Câu lệnh INSERT IGNORE hướng dẫn MariaDB hủy việc chèn khi phát hiện ra một bản ghi trùng lặp. Xem lại một ví dụ về việc sử dụng nó dưới đây:

mysql> INSERT IGNORE INTO customer_tbl (LN, FN)
   VALUES( 'Lex', 'Luther');

Ngoài ra, hãy lưu ý logic đằng sau các bản sao. Một số bảng yêu cầu bản sao dựa trên bản chất của dữ liệu bảng đó. Đáp ứng nhu cầu đó trong chiến lược quản lý hồ sơ trùng lặp của bạn.