Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

JSON_SET() vs JSON_INSERT() vs JSON_REPLACE() di MySQL:Apa Bedanya?

Di MySQL, ada sejumlah fungsi untuk membantu Anda bekerja dengan dokumen JSON. Ini termasuk JSON_SET() , JSON_INSERT() , dan JSON_REPLACE() fungsi.

Ketiga fungsi ini saling terkait, namun sedikit berbeda.

Sintaks

Pertama, inilah sintaks untuk ketiga fungsi:

JSON_SET(json_doc, jalur, val[, jalur, val] ...)JSON_INSERT(json_doc, jalur, val[, jalur, val] ...)JSON_REPLACE(json_doc, jalur, val[, jalur, val] ...)

Jadi ketiga fungsi menerima argumen yang sama. Inilah gunanya argumen ini:

  • json_doc adalah dokumen JSON.
  • path adalah jalur elemen untuk menyisipkan data atau memperbarui nilainya.
  • val adalah nilai baru.

Perbedaan

Inilah perbedaan antara fungsi-fungsi ini:

  • JSON_SET() menggantikan nilai yang ada dan menambahkan nilai yang tidak ada.
  • JSON_INSERT() menyisipkan nilai tanpa mengganti nilai yang ada.
  • JSON_REPLACE() hanya menggantikan nilai yang ada.

Jadi pada dasarnya mana yang Anda gunakan bergantung pada apakah Anda memperbarui nilai yang ada atau memasukkan nilai baru (walaupun JSON_SET() melakukan keduanya).

Contoh 1 – Masukkan Nilai

Berikut adalah contoh untuk menunjukkan perbedaan antara ketiga fungsi ini.

JSON_SET()

Inilah yang terjadi jika kita mencoba memasukkan nilai baru menggunakan JSON_SET() :

PILIH JSON_SET('{"a":1, "b":2}', '$.c', 3) SEBAGAI 'Hasil';

Hasil:

+--------------------------+| Hasil |+--------------------------+| {"a":1, "b":2, "c":3} |+--------------------------+ 

Jadi itu bekerja dengan sempurna.

JSON_INSERT()

Inilah yang terjadi jika kita mencoba memasukkan nilai baru menggunakan JSON_INSERT() :

SELECT JSON_INSERT('{"a":1, "b":2}', '$.c', 3) SEBAGAI 'Hasil';

Hasil:

+--------------------------+| Hasil |+--------------------------+| {"a":1, "b":2, "c":3} |+--------------------------+ 

Hasil yang sama persis dengan JSON_SET() .

JSON_REPLACE()

Inilah yang terjadi jika kita mencoba memasukkan nilai baru menggunakan JSON_REPLACE() :

SELECT JSON_REPLACE('{"a":1, "b":2}', '$.c', 3) SEBAGAI 'Hasil';

Hasil:

+------------------+| Hasil |+------------------+| {"a":1, "b":2} |+------------------+

Dalam hal ini, nilai baru tidak dimasukkan. Dokumen JSON asli dikembalikan tidak berubah. Ini karena fungsi ini hanya menggantikan nilai yang ada – tidak memasukkan nilai baru.

Contoh 2 – Memperbarui Nilai yang Ada

Sekarang untuk memperbarui nilai yang ada.

JSON_SET()

Inilah yang terjadi jika kami mencoba memperbarui nilai yang ada menggunakan JSON_SET() :

SELECT JSON_SET('{"a":1, "b":2}', '$.b', 3) SEBAGAI 'Hasil';

Hasil:

+------------------+| Hasil |+------------------+| {"a":1, "b":3} |+------------------+

Jadi sekali lagi, itu bekerja dengan sempurna. Kami berhasil memperbarui pasangan kunci/nilai kedua dengan nilai baru.

JSON_INSERT()

Inilah yang terjadi jika kami mencoba memperbarui nilai yang ada menggunakan JSON_INSERT() :

SELECT JSON_INSERT('{"a":1, "b":2}', '$.b', 3) SEBAGAI 'Hasil';

Hasil:

+------------------+| Hasil |+------------------+| {"a":1, "b":2} |+------------------+

Dalam hal ini nilai yang ada tidak diperbarui. Dokumen JSON dikembalikan tidak berubah. Ini karena JSON_INSERT() fungsi hanya memasukkan nilai baru – tidak memperbarui nilai yang sudah ada.

JSON_REPLACE()

Inilah yang terjadi jika kami mencoba memperbarui nilai yang ada menggunakan JSON_REPLACE() :

SELECT JSON_REPLACE('{"a":1, "b":2}', '$.b', 3) SEBAGAI 'Hasil';

Hasil:

+------------------+| Hasil |+------------------+| {"a":1, "b":3} |+------------------+

Ini diperbarui dengan sempurna.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Batasan kunci asing palsu gagal

  2. File aman untuk diunduh

  3. kueri dinamis mysql dalam prosedur tersimpan

  4. Menggunakan indeks, menggunakan sementara, menggunakan filesort - bagaimana cara memperbaikinya?

  5. MySQL tidak menggunakan indeks dengan klausa WHERE IN?