1. Giới thiệu
1.1 Tầm quan trọng của JSON
Trong phát triển web hiện đại, việc trao đổi dữ liệu ngày càng trở nên phức tạp. JSON (JavaScript Object Notation) được sử dụng rộng rãi cho việc truyền và lưu trữ dữ liệu nhờ định dạng nhẹ và có cấu trúc. Kể từ phiên bản 5.7, MySQL đã hỗ trợ kiểu dữ liệu JSON, giúp dễ dàng xử lý dữ liệu JSON trực tiếp trong cơ sở dữ liệu.
1.2 Sử dụng JSON trong MySQL
Bài viết này cung cấp giải thích chi tiết về JSON trong MySQL, bao gồm các hoạt động cơ bản, các cân nhắc về hiệu suất và các kỹ thuật sử dụng thực tế. Nó cung cấp kiến thức thiết yếu để sử dụng JSON trong MySQL một cách hiệu quả, dù bạn là người mới bắt đầu hay người dùng nâng cao.
2. JSON trong MySQL là gì?
2.1 Các khái niệm cơ bản về JSON
JSON là một định dạng đơn giản cấu trúc dữ liệu dưới dạng các cặp khóa-giá trị. Nó được sử dụng rộng rãi trong các API web và truyền dữ liệu nhờ tính nhẹ và khả năng đọc. Trong MySQL, bạn có thể sử dụng kiểu dữ liệu JSON để lưu trữ và thao tác dữ liệu JSON trực tiếp trong cơ sở dữ liệu.
2.2 Kiểu dữ liệu JSON trong MySQL
Kiểu dữ liệu JSON được giới thiệu trong MySQL 5.7 yêu cầu không gian đĩa tương tự như LONGBLOB hoặc LONGTEXT. Để đảm bảo tính toàn vẹn dữ liệu, MySQL xác thực các tài liệu JSON khi chèn. Điều này ngăn chặn dữ liệu JSON không hợp lệ được lưu trữ trong cơ sở dữ liệu.
2.3 Các trường hợp sử dụng phổ biến cho JSON
Các tình huống chính để sử dụng JSON trong MySQL bao gồm các trường hợp sau:
- Lưu trữ các cấu trúc dữ liệu phức tạp
- Lưu phản hồi API mà không thay đổi
- Quản lý dữ liệu với các schema đang phát triển
3. Các hoạt động JSON cơ bản trong MySQL
3.1 Tạo cột JSON
Để tạo một cột lưu trữ dữ liệu JSON, hãy chỉ định kiểu dữ liệu JSON như được hiển thị bên dưới:
CREATE TABLE json_data (
doc JSON
);
3.2 Chèn dữ liệu JSON
Sử dụng câu lệnh INSERT để chèn dữ liệu JSON như được hiển thị bên dưới. MySQL kiểm tra xem dữ liệu có phải là định dạng JSON hợp lệ tại thời điểm chèn và trả về lỗi nếu không phải.
INSERT INTO json_data(doc) VALUES ('{"a": {"b": ["c", "d"]}, "e": "f"}');
Bạn cũng có thể tạo một đối tượng JSON từ các cặp khóa-giá trị bằng hàm JSON_OBJECT.
INSERT INTO json_data(doc) VALUES (JSON_OBJECT('key1', 'value1', 'key2', 'value2'));
3.3 Truy vấn dữ liệu JSON
Để lấy dữ liệu JSON đã chèn, sử dụng hàm JSON_EXTRACT. Hàm này trích xuất dữ liệu từ một đường dẫn được chỉ định trong đối tượng JSON.
SELECT * FROM json_data WHERE JSON_EXTRACT(doc, '$.e') = 'f';
Bạn cũng có thể sử dụng toán tử viết tắt ->.
SELECT * FROM json_data WHERE doc->'$.e' = 'f';
3.4 Cập nhật dữ liệu JSON
Để cập nhật một phần dữ liệu JSON, sử dụng hàm JSON_SET. Hàm này cập nhật đường dẫn được chỉ định và trả về một đối tượng JSON mới.
UPDATE json_data SET doc = JSON_SET(doc, '$.a.b[0]', 'new_value');
4. Các cân nhắc về hiệu suất
4.1 Hiệu suất chèn
Khi chèn dữ liệu vào cột JSON của MySQL, sự khác biệt về hiệu suất giữa kiểu TEXT và kiểu JSON là rất nhỏ. Kiểm tra thời gian chạy cho thấy việc chèn 50.000 bản ghi bằng kiểu JSON hoàn thành trong khoảng thời gian tương tự như sử dụng kiểu TEXT.
4.2 Hiệu suất cập nhật
Khi cập nhật dữ liệu JSON, việc sử dụng JSON_SET cho phép cập nhật một phần hiệu quả. Thay vì ghi đè toàn bộ tài liệu, bạn có thể chỉ cập nhật các trường cụ thể, điều này cải thiện hiệu suất. Ngay cả khi cập nhật một phần 50.000 bản ghi, JSON_SET cho phép thực thi hiệu quả.

5. Các thực hành tốt nhất khi sử dụng JSON trong MySQL
5.1 Khi nào sử dụng JSON một cách phù hợp
JSON phù hợp để lưu trữ các cấu trúc dữ liệu phức tạp và dữ liệu với các schema đang phát triển. Tuy nhiên, đối với dữ liệu có cấu trúc cao, việc sử dụng các bảng quan hệ tiêu chuẩn thường hiệu quả hơn.
5.2 Chỉ mục hóa dữ liệu JSON
Trong MySQL, bạn có thể tạo chỉ mục trên các cột JSON bằng cách sử dụng Cột Ảo. Điều này cho phép bạn cải thiện hiệu suất truy vấn khi làm việc với dữ liệu JSON.
ALTER TABLE json_data
ADD COLUMN e_value VARCHAR(255) AS (doc->'$.e'),
ADD INDEX (e_value);
5.3 Tránh Các Lỗi Thường Gặp
- Tránh lạm dụng cột JSON và tận dụng điểm mạnh của cơ sở dữ liệu quan hệ.
- Cấu hình các chỉ mục phù hợp để đảm bảo các truy vấn hiệu quả.
- Ngăn chặn dữ liệu JSON trở nên quá lớn, và chuẩn hóa dữ liệu khi cần thiết.
6. Các Hàm JSON Nâng Cao Trong MySQL
6.1 Các Hàm JSON Bổ Sung
MySQL cung cấp nhiều hàm để thao tác dữ liệu JSON. Ví dụ, bạn có thể thêm dữ liệu mới vào mảng JSON bằng cách sử dụng JSON_APPEND, hoặc xóa các trường cụ thể bằng cách sử dụng JSON_REMOVE.
-- Append data
UPDATE json_data SET doc = JSON_APPEND(doc, '$.a.b', 'new_element');
-- Remove data
UPDATE json_data SET doc = JSON_REMOVE(doc, '$.a.b[0]');
6.2 Kết Hợp JSON Với Các Hàm SQL
Các hàm JSON có thể được kết hợp với các hàm SQL truyền thống để xây dựng các truy vấn phức tạp hơn. Ví dụ, bạn có thể sử dụng dữ liệu JSON trong các mệnh đề GROUP BY hoặc ORDER BY.
SELECT JSON_EXTRACT(doc, '$.e') AS e_value, COUNT(*)
FROM json_data
GROUP BY e_value;
7. Kết Luận
Trong bài viết này, chúng tôi đã bao quát mọi thứ từ các hoạt động JSON cơ bản trong MySQL đến chức năng nâng cao. Bằng cách tận dụng các tính năng JSON của MySQL, bạn có thể dễ dàng lưu trữ và thao tác các cấu trúc dữ liệu phức tạp trong cơ sở dữ liệu của mình. Áp dụng kiến thức về các cân nhắc hiệu suất và thực hành tốt nhất được thảo luận ở đây để đạt được quản lý dữ liệu hiệu quả hơn.


