Mysql
 sql >> Database >  >> RDS >> Mysql

JSON_SET() vs JSON_INSERT() vs JSON_REPLACE() in MySQL:qual è la differenza?

In MySQL, ci sono una serie di funzioni che ti aiutano a lavorare con i documenti JSON. Questi includono il JSON_SET() , JSON_INSERT() e JSON_REPLACE() funzioni.

Queste tre funzioni sono correlate, ma differiscono leggermente.

Sintassi

Innanzitutto, ecco la sintassi per tutte e tre le funzioni:

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

Quindi tutte e tre le funzioni accettano gli stessi argomenti. Ecco a cosa servono questi argomenti:

  • json_doc è il documento JSON.
  • path è il percorso dell'elemento per il quale inserire dati o aggiornare il valore in.
  • val è il nuovo valore.

La differenza

Ecco la differenza tra queste funzioni:

  • JSON_SET() sostituisce i valori esistenti e aggiunge valori inesistenti.
  • JSON_INSERT() inserisce i valori senza sostituire quelli esistenti.
  • JSON_REPLACE() sostituisce solo i valori esistenti.

Quindi, in pratica, quello che usi dipende dal fatto che tu stia aggiornando un valore esistente o inserendone uno nuovo (sebbene JSON_SET() fa entrambe le cose).

Esempio 1:inserire un valore

Ecco degli esempi per dimostrare la differenza tra queste tre funzioni.

JSON_SET()

Ecco cosa succede se proviamo a inserire un nuovo valore usando JSON_SET() :

SELECT JSON_SET('{"a": 1, "b": 2}', '$.c', 3) AS 'Result';

Risultato:

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

Quindi ha funzionato perfettamente.

JSON_INSERT()

Ecco cosa succede se proviamo a inserire un nuovo valore usando JSON_INSERT() :

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

Risultato:

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

Esattamente lo stesso risultato di JSON_SET() .

JSON_REPLACE()

Ecco cosa succede se proviamo a inserire un nuovo valore usando JSON_REPLACE() :

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

Risultato:

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

In questo caso, il nuovo valore non è stato inserito. Il documento JSON originale viene restituito invariato. Questo perché questa funzione sostituisce solo i valori esistenti, non ne inserisce di nuovi.

Esempio 2:aggiornamento di un valore esistente

Ora per aggiornare i valori esistenti.

JSON_SET()

Ecco cosa succede se proviamo ad aggiornare un valore esistente utilizzando JSON_SET() :

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

Risultato:

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

Quindi, ancora una volta, ha funzionato perfettamente. Abbiamo aggiornato con successo la seconda coppia chiave/valore con il nuovo valore.

JSON_INSERT()

Ecco cosa succede se proviamo ad aggiornare un valore esistente utilizzando JSON_INSERT() :

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

Risultato:

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

In questo caso il valore esistente non è stato aggiornato. Il documento JSON viene restituito invariato. Questo perché JSON_INSERT() la funzione inserisce solo nuovi valori, non aggiorna quelli esistenti.

JSON_REPLACE()

Ecco cosa succede se proviamo ad aggiornare un valore esistente utilizzando JSON_REPLACE() :

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

Risultato:

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

Si aggiorna perfettamente.