×

Thêm phần tử vào mảng JSON với JSON_ARRAY_APPEND() trong MySQL

Trong quá trình làm việc với cơ sở dữ liệu MySQL, việc thao tác với dữ liệu dạng JSON trở nên ngày càng phổ biến. Một trong những tác vụ quan trọng là thêm phần tử vào mảng JSON. MySQL cung cấp hàm JSON_ARRAY_APPEND() để giúp người dùng thực hiện việc này một cách dễ dàng. Bài viết dưới đây sẽ hướng dẫn chi tiết cách sử dụng hàm này cũng như cung cấp một số ví dụ minh họa cụ thể.

Giới thiệu JSON_ARRAY_APPEND()

Hàm JSON_ARRAY_APPEND() trong MySQL được sử dụng để thêm một giá trị vào một mảng JSON tại một vị trí đã xác định. Cú pháp của hàm như sau:

JSON_ARRAY_APPEND(json_doc, path, value[, path, value] ...)
  • json_doc: Tài liệu JSON mà bạn muốn thao tác.
  • path: Đường dẫn đến mảng JSON mà bạn muốn thêm phần tử.
  • value: Giá trị mới bạn muốn thêm vào mảng.

Ví dụ Sử Dụng Cơ Bản

Giả sử chúng ta có một bảng tên là sinh_vien với cột diem_thi lưu trữ dữ liệu dạng JSON.

CREATE TABLE sinh_vien (
    id INT AUTO_INCREMENT PRIMARY KEY,
    ho_ten VARCHAR(100),
    diem_thi JSON
);

Dữ liệu của bảng có thể như sau:

INSERT INTO sinh_vien (ho_ten, diem_thi)
VALUES ('Nguyen Van A', '[7.5, 8.0, 9.0]'),
       ('Tran Thi B', '[6.0, 7.0, 8.5]');

Giả sử Nguyễn Văn A vừa thi thêm một môn học và đạt được 9.5 điểm, chúng ta cần thêm điểm này vào mảng diem_thi của anh ấy. Câu lệnh SQL sẽ như sau:

UPDATE sinh_vien
SET diem_thi = JSON_ARRAY_APPEND(diem_thi, '$', 9.5)
WHERE ho_ten = 'Nguyen Van A';

Sau khi thực hiện lệnh này, dữ liệu của Nguyễn Văn A sẽ được cập nhật như sau:

SELECT ho_ten, diem_thi
FROM sinh_vien
WHERE ho_ten = 'Nguyen Van A';

Kết quả:

+--------------+--------------------+
| ho_ten       | diem_thi           |
+--------------+--------------------+
| Nguyen Van A | [7.5, 8.0, 9.0, 9.5]|
+--------------+--------------------+

Thêm Phần Tử Vào Mảng JSON Lồng Nhau

JSON_ARRAY_APPEND() cũng hỗ trợ thêm phần tử vào các mảng JSON lồng nhau. Dưới đây là ví dụ minh họa:

Giả sử chúng ta có bảng san_pham với cột chi_tiet chứa thông tin sản phẩm dạng JSON:

CREATE TABLE san_pham (
    id INT AUTO_INCREMENT PRIMARY KEY,
    ten_san_pham VARCHAR(100),
    chi_tiet JSON
);

Một sản phẩm lưu trữ dữ liệu như sau:

INSERT INTO san_pham (ten_san_pham, chi_tiet)
VALUES ('Laptop Gaming', '{"cau_hinh": {"ram": ["8GB", "16GB"], "o_cung": ["256GB SSD"]}}');

Giờ chúng ta muốn thêm một tùy chọn ổ cứng mới (512GB SSD) vào danh sách o_cung. Câu lệnh SQL sẽ như sau:

UPDATE san_pham
SET chi_tiet = JSON_ARRAY_APPEND(chi_tiet, '$.cau_hinh.o_cung', '512GB SSD')
WHERE ten_san_pham = 'Laptop Gaming';

Sau khi thực hiện lệnh này, dữ liệu của sản phẩm sẽ được cập nhật như sau:

SELECT ten_san_pham, chi_tiet
FROM san_pham
WHERE ten_san_pham = 'Laptop Gaming';

Kết quả:

+---------------+--------------------------------------------------------+
| ten_san_pham  | chi_tiet                                               |
+---------------+--------------------------------------------------------+
| Laptop Gaming | {"cau_hinh": {"ram": ["8GB", "16GB"], "o_cung": ["256GB SSD", "512GB SSD"]}} |
+---------------+--------------------------------------------------------+

Các Lỗi Thường Gặp và Cách Khắc Phục

  • Đường dẫn không chính xác: Nếu bạn chỉ định sai đường dẫn (path), hàm sẽ không thể tìm được mảng JSON để thêm phần tử, dẫn đến lỗi. Cần kiểm tra cẩn thận đường dẫn trước khi thực hiện lệnh.
  • Dữ liệu không phải là mảng: Nếu đường dẫn không trỏ tới một mảng JSON, việc thêm phần tử sẽ thất bại. Đảm bảo bạn đang thao tác trên đúng kiểu dữ liệu.

Kết Luận

MySQL cung cấp công cụ mạnh mẽ giúp dễ dàng thao tác với dữ liệu JSON, và hàm JSON_ARRAY_APPEND() là một trong số đó. Nó giúp thêm phần tử vào mảng JSON một cách nhanh chóng và hiệu quả. Việc hiểu cách sử dụng hàm này sẽ giúp bạn làm việc với dữ liệu JSON thuận lợi hơn trong các dự án sử dụng cơ sở dữ liệu MySQL.

Comments