×

Chèn phần tử vào mảng JSON với JSON_ARRAY_INSERT() trong MySQL

Trong cơ sở dữ liệu MySQL, việc làm việc với dữ liệu JSON trở nên ngày càng phổ biến, đặc biệt là với sự phát triển của các ứng dụng web và di động. Một trong những thao tác quan trọng khi xử lý dữ liệu JSON là chèn phần tử mới vào một mảng đã tồn tại. MySQL cung cấp một hàm hữu ích cho mục đích này, đó là JSON_ARRAY_INSERT().

Giới thiệu về JSON_ARRAY_INSERT()

JSON_ARRAY_INSERT() là một hàm của MySQL cho phép chèn một phần tử vào vị trí xác định trong mảng JSON. Hàm này rất hữu ích khi bạn cần thêm dữ liệu vào một mảng mà không muốn thay đổi toàn bộ cấu trúc của nó.

Cú pháp của JSON_ARRAY_INSERT()

Cú pháp cơ bản của hàm JSON_ARRAY_INSERT() như sau:

JSON_ARRAY_INSERT(json_doc, path, val[, path, val] ...)
  • json_doc: Tài liệu JSON mà bạn muốn chèn phần tử vào.
  • path: Vị trí trong tài liệu JSON mà bạn muốn thêm phần tử. Vị trí này được xác định bằng một biểu thức đường dẫn JSON.
  • val: Giá trị của phần tử mới mà bạn muốn chèn vào.

Ví dụ minh họa

Giả sử chúng ta có bảng sau:

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    data JSON
);

Và bảng này hiện có dữ liệu như sau:

INSERT INTO users (data) VALUES ('{"name": "Alex", "hobbies": ["reading", "swimming"]}');

Chèn phần tử vào mảng

Chúng ta muốn chèn phần tử "coding" vào mảng hobbies. Sử dụng hàm JSON_ARRAY_INSERT(), ta có thể thực hiện như sau:

UPDATE users 
SET data = JSON_ARRAY_INSERT(data, '$.hobbies[1]', 'coding') 
WHERE id = 1;

Đoạn lệnh trên sẽ chèn "coding" vào vị trí thứ hai trong mảng hobbies. Sau khi cập nhật, dữ liệu của dòng sẽ trông như sau:

{
    "name": "Alex",
    "hobbies": ["reading", "coding", "swimming"]
}

Chèn vào vị trí đầu tiên

Nếu bạn muốn chèn phần tử vào vị trí đầu tiên trong mảng, bạn có thể điều chỉnh path như sau:

UPDATE users 
SET data = JSON_ARRAY_INSERT(data, '$.hobbies[0]', 'traveling') 
WHERE id = 1;

Kết quả sau khi cập nhật sẽ là:

{
    "name": "Alex",
    "hobbies": ["traveling", "reading", "coding", "swimming"]
}

Lưu ý khi sử dụng JSON_ARRAY_INSERT()

  • Vị trí của phần tử bắt đầu từ số 0.
  • Nếu vị trí bạn chỉ định vượt quá kích thước hiện tại của mảng, JSON_ARRAY_INSERT() sẽ không thêm phần tử đó vào mảng.
  • Hàm này không thay thế giá trị hiện tại tại vị trí xác định mà chỉ thêm phần tử mới vào trước vị trí đó.

Kết luận

Hàm JSON_ARRAY_INSERT() của MySQL giúp việc thao tác với dữ liệu JSON trở nên linh hoạt hơn. Bạn có thể dễ dàng chèn các phần tử vào mảng JSON theo vị trí cụ thể mà không cần phải sửa đổi toàn bộ cấu trúc dữ liệu. Điều này không chỉ giúp tiết kiệm thời gian mà còn giảm bớt lỗi trong quá trình thao tác với dữ liệu JSON phức tạp.

Comments