Ngày nay, việc lưu trữ và xử lý dữ liệu theo cấu trúc JSON ngày càng trở nên phổ biến trong các ứng dụng web và cơ sở dữ liệu. Với sự phát triển của các ứng dụng dựa trên API và việc trao đổi dữ liệu giữa các hệ thống qua JSON, việc hỗ trợ JSON trong các hệ quản trị cơ sở dữ liệu là điều không thể thiếu. Bắt đầu từ MySQL 5.7, MySQL đã cung cấp hỗ trợ tích hợp cho việc lưu trữ và xử lý dữ liệu JSON. Trong bài viết này, chúng ta sẽ cùng tìm hiểu cách làm việc với dữ liệu JSON trong MySQL, bao gồm cú pháp, các hàm thao tác và một số ví dụ thực tế.

1. JSON là gì?

JSON (JavaScript Object Notation) là một định dạng dữ liệu nhẹ, dễ đọc và ghi, thường được sử dụng để trao đổi dữ liệu giữa máy chủ và trình duyệt. JSON có thể lưu trữ dữ liệu dưới dạng các đối tượng (object), mảng (array), chuỗi (string), số (number), và giá trị boolean (true, false).

Ví dụ một đối tượng JSON:

json
{
  "name": "Code Tut Hub",
  "founded": 2023,
  "services": ["Web Development", "SEO", "Digital Marketing"]
}

2. Lưu trữ JSON trong MySQL

MySQL cho phép bạn lưu trữ dữ liệu JSON trong cột có kiểu dữ liệu JSON. Đây là một kiểu dữ liệu mới được giới thiệu từ MySQL 5.7.

Tạo bảng với cột JSON:

shell
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255),
    data JSON
);

Trong ví dụ trên, cột data là cột kiểu JSON, nơi bạn có thể lưu trữ các đối tượng hoặc mảng JSON.

3. Thêm dữ liệu JSON vào MySQL

Để thêm dữ liệu JSON vào bảng, bạn có thể sử dụng cú pháp INSERT thông thường. Lưu ý rằng dữ liệu JSON phải hợp lệ.

Ví dụ chèn dữ liệu JSON:

shell
INSERT INTO users (name, data) 
VALUES ('John Doe', '{"age": 30, "city": "New York", "skills": ["PHP", "MySQL", "JavaScript"]}');

Trong ví dụ trên, cột data lưu trữ một đối tượng JSON chứa thông tin tuổi, thành phố, và kỹ năng của người dùng.

4. Truy xuất dữ liệu JSON từ MySQL

MySQL cung cấp nhiều hàm để thao tác và truy xuất dữ liệu từ cột JSON. Các hàm này cho phép bạn lấy ra các giá trị cụ thể từ đối tượng JSON.

4.1. Sử dụng hàm JSON_EXTRACT()

JSON_EXTRACT() là hàm được sử dụng để truy xuất giá trị từ cột JSON dựa trên đường dẫn của nó.

Ví dụ:

Giả sử chúng ta có dữ liệu JSON như sau trong cột data:

json
{
  "age": 30,
  "city": "New York",
  "skills": ["PHP", "MySQL", "JavaScript"]
}

Để truy xuất giá trị của trường age, bạn có thể viết truy vấn như sau:

shell
SELECT JSON_EXTRACT(data, '$.age') AS age FROM users WHERE name = 'John Doe';

Kết quả trả về:

shell
age
-----
30

Trong đó:

  • $.age là đường dẫn JSON, $ đại diện cho đối tượng JSON gốc, và .age là thuộc tính cần truy xuất.

4.2. Truy xuất trực tiếp bằng -> (toán tử JSON)

Một cách khác để truy xuất giá trị JSON là sử dụng toán tử mũi tên ->, cho phép bạn lấy dữ liệu JSON dễ dàng hơn.

Ví dụ:

shell
SELECT data->'$.city' AS city FROM users WHERE name = 'John Doe';

Kết quả trả về:

shell
city
-------
"New York"

4.3. Truy xuất giá trị không chứa dấu ngoặc kép

Nếu bạn muốn kết quả trả về mà không chứa dấu ngoặc kép quanh các giá trị JSON, bạn có thể sử dụng ->> thay vì ->:

shell
SELECT data->>'$.city' AS city FROM users WHERE name = 'John Doe';

Kết quả:

shell
city
-------
New York

5. Cập nhật dữ liệu JSON trong MySQL

Bạn có thể sử dụng câu lệnh UPDATE cùng với các hàm JSON để cập nhật giá trị trong cột JSON.

Ví dụ:

Giả sử bạn muốn cập nhật trường age trong dữ liệu JSON của người dùng John Doe từ 30 lên 31, bạn có thể viết truy vấn như sau:

shell
UPDATE users
SET data = JSON_SET(data, '$.age', 31)
WHERE name = 'John Doe';

Trong đó:

  • JSON_SET() là hàm dùng để cập nhật giá trị trong đối tượng JSON.
  • $.age là đường dẫn tới trường cần cập nhật.

6. Các hàm JSON quan trọng trong MySQL

6.1. JSON_CONTAINS()

JSON_CONTAINS() kiểm tra xem một đối tượng JSON có chứa giá trị cụ thể hay không.

Ví dụ:

Kiểm tra xem mảng skills có chứa giá trị "PHP" hay không:

shell
SELECT * FROM users WHERE JSON_CONTAINS(data->'$.skills', '"PHP"');

6.2. JSON_LENGTH()

JSON_LENGTH() trả về số lượng phần tử trong đối tượng hoặc mảng JSON.

Ví dụ:

Lấy số lượng kỹ năng của người dùng John Doe:

shell
SELECT JSON_LENGTH(data->'$.skills') AS skill_count FROM users WHERE name = 'John Doe';

6.3. JSON_ARRAY()JSON_OBJECT()

  • JSON_ARRAY(): Tạo một mảng JSON từ các giá trị đầu vào.
  • JSON_OBJECT(): Tạo một đối tượng JSON từ các cặp khóa-giá trị.

Ví dụ:

shell
SELECT JSON_ARRAY(1, 2, 'Code Tut Hub', true) AS my_array;
SELECT JSON_OBJECT('name', 'Code Tut Hub', 'year', 2023) AS my_object;

7. Kết luận

Làm việc với dữ liệu JSON trong MySQL mang lại sự linh hoạt và hiệu quả trong việc lưu trữ và xử lý dữ liệu có cấu trúc động. MySQL cung cấp một loạt các hàm mạnh mẽ để truy xuất, thao tác và cập nhật dữ liệu JSON. Qua bài viết này, bạn đã nắm được các cú pháp và cách thức cơ bản để làm việc với JSON trong MySQL, từ việc lưu trữ, truy xuất cho đến cập nhật dữ liệu. Hãy áp dụng chúng vào dự án của bạn để tận dụng lợi thế của JSON trong các hệ thống cơ sở dữ liệu hiện đại.


Code Tut Hub - Học lập trình và chia sẻ kiến thức cùng chúng tôi!