Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

JSON_SET () so với JSON_INSERT () so với JSON_REPLACE () trong MySQL:Sự khác biệt là gì?

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()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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dấu phân cách trong MySQL

  2. Thiết lập cơ sở dữ liệu và tạo người dùng chỉ đọc trong AWS Redshift và Mysql

  3. Cách chèn một mảng vào một câu lệnh MySQL Prepared duy nhất w / PHP và PDO

  4. Cách chia DATE và TIME khỏi DATETIME trong MySQL

  5. MySQL CHAR () so với T-SQL CHAR ():Sự khác biệt là gì?