Trong MySQL, có một số hàm để giúp bạn làm việc với các tài liệu JSON. Chúng bao gồm JSON_SET()
, JSON_INSERT()
và JSON_REPLACE()
các chức năng.
Ba chức năng này có liên quan với nhau, nhưng chúng hơi khác nhau.
Cú pháp
Đầu tiên, đây là cú pháp cho cả ba hàm:
JSON_SET (json_doc, path, val [, path, val] ...) JSON_INSERT (json_doc, path, val [, path, val] ...) JSON_REPLACE (json_doc, path, val [, path, val] ...)
Vì vậy, cả ba hàm đều chấp nhận các đối số giống nhau. Đây là những gì các đối số này dùng cho:
-
json_doc
là tài liệu JSON. -
path
là đường dẫn của phần tử để chèn dữ liệu hoặc cập nhật giá trị tại đó. -
val
là giá trị mới.
Sự khác biệt
Dưới đây là sự khác biệt giữa các chức năng này:
-
JSON_SET()
thay thế các giá trị hiện có và thêm các giá trị không tồn tại. -
JSON_INSERT()
chèn các giá trị mà không thay thế các giá trị hiện có. -
JSON_REPLACE()
chỉ thay thế các giá trị hiện có.
Vì vậy, về cơ bản bạn sử dụng giá trị nào phụ thuộc vào việc bạn đang cập nhật giá trị hiện có hay chèn giá trị mới (mặc dù JSON_SET()
làm cả hai).
Ví dụ 1 - Chèn giá trị
Dưới đây là các ví dụ để chứng minh sự khác biệt giữa ba chức năng này.
JSON_SET ()
Đây là những gì sẽ xảy ra nếu chúng tôi cố gắng chèn một giá trị mới bằng JSON_SET()
:
SELECT JSON_SET ('{"a":1, "b":2}', '$ .c', 3) NHƯ 'Kết quả';
Kết quả:
+ -------------------------- + | Kết quả | + -------------------------- + | {"a":1, "b":2, "c":3} | + -------------------------- +Vì vậy, nó hoạt động hoàn hảo.
JSON_INSERT ()
Đây là những gì sẽ xảy ra nếu chúng tôi cố gắng chèn một giá trị mới bằng
JSON_INSERT()
:SELECT JSON_INSERT ('{"a":1, "b":2}', '$ .c', 3) NHƯ 'Kết quả';Kết quả:
+ -------------------------- + | Kết quả | + -------------------------- + | {"a":1, "b":2, "c":3} | + -------------------------- +Kết quả chính xác giống như với
JSON_SET()
.JSON_REPLACE ()
Đây là những gì sẽ xảy ra nếu chúng tôi cố gắng chèn một giá trị mới bằng
JSON_REPLACE()
:SELECT JSON_REPLACE ('{"a":1, "b":2}', '$ .c', 3) NHƯ 'Kết quả';Kết quả:
+ ------------------ + | Kết quả | + ------------------ + | {"a":1, "b":2} | + ------------------ +Trong trường hợp này, giá trị mới không được chèn. Tài liệu JSON ban đầu được trả lại không thay đổi. Điều này là do hàm này chỉ thay thế các giá trị hiện có - nó không chèn các giá trị mới.
Ví dụ 2 - Cập nhật Giá trị Hiện tại
Bây giờ để cập nhật các giá trị hiện có.
JSON_SET ()
Đây là những gì sẽ xảy ra nếu chúng tôi cố gắng cập nhật giá trị hiện có bằng
JSON_SET()
:SELECT JSON_SET ('{"a":1, "b":2}', '$ .b', 3) NHƯ 'Kết quả';Kết quả:
+ ------------------ + | Kết quả | + ------------------ + | {"a":1, "b":3} | + ------------------ +Vì vậy, một lần nữa, nó hoạt động hoàn hảo. Chúng tôi đã cập nhật thành công cặp khóa / giá trị thứ hai với giá trị mới.
JSON_INSERT ()
Đây là những gì sẽ xảy ra nếu chúng tôi cố gắng cập nhật giá trị hiện có bằng
JSON_INSERT()
:SELECT JSON_INSERT ('{"a":1, "b":2}', '$ .b', 3) NHƯ 'Kết quả';Kết quả:
+ ------------------ + | Kết quả | + ------------------ + | {"a":1, "b":2} | + ------------------ +Trong trường hợp này, giá trị hiện tại không được cập nhật. Tài liệu JSON được trả về không thay đổi. Điều này là do
JSON_INSERT()
hàm chỉ chèn các giá trị mới - nó không cập nhật các giá trị hiện có.JSON_REPLACE ()
Đây là điều sẽ xảy ra nếu chúng tôi cố gắng cập nhật giá trị hiện có bằng
JSON_REPLACE()
:SELECT JSON_REPLACE ('{"a":1, "b":2}', '$ .b', 3) NHƯ 'Kết quả';Kết quả:
+ ------------------ + | Kết quả | + ------------------ + | {"a":1, "b":3} | + ------------------ +Nó cập nhật hoàn hảo.