Mysql
 sql >> Base de données >  >> RDS >> Mysql

JSON_SET() vs JSON_INSERT() vs JSON_REPLACE() dans MySQL :Quelle est la différence ?

Dans MySQL, il existe un certain nombre de fonctions pour vous aider à travailler avec des documents JSON. Ceux-ci incluent JSON_SET() , JSON_INSERT() , et JSON_REPLACE() fonctions.

Ces trois fonctions sont liées, mais elles diffèrent légèrement.

Syntaxe

Tout d'abord, voici la syntaxe des trois fonctions :

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

Les trois fonctions acceptent donc les mêmes arguments. Voici à quoi servent ces arguments :

  • json_doc est le document JSON.
  • path est le chemin de l'élément pour lequel insérer des données ou mettre à jour la valeur.
  • val est la nouvelle valeur.

La différence

Voici la différence entre ces fonctions :

  • JSON_SET() remplace les valeurs existantes et ajoute des valeurs inexistantes.
  • JSON_INSERT() insère des valeurs sans remplacer les valeurs existantes.
  • JSON_REPLACE() remplace uniquement les valeurs existantes.

Donc, fondamentalement, celui que vous utilisez dépend si vous mettez à jour une valeur existante ou en insérez une nouvelle (bien que JSON_SET() fait les deux).

Exemple 1 - Insérer une valeur

Voici des exemples pour démontrer la différence entre ces trois fonctions.

JSON_SET()

Voici ce qui se passe si nous essayons d'insérer une nouvelle valeur en utilisant JSON_SET() :

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

Résultat :

+-----------------------------------+| Résultat |+--------------------------+| {"a":1, "b":2, "c":3} |+--------------------------+ 

Cela a donc parfaitement fonctionné.

JSON_INSERT()

Voici ce qui se passe si nous essayons d'insérer une nouvelle valeur en utilisant JSON_INSERT() :

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

Résultat :

+-----------------------------------+| Résultat |+--------------------------+| {"a":1, "b":2, "c":3} |+--------------------------+ 

Exactement le même résultat qu'avec JSON_SET() .

JSON_REPLACE()

Voici ce qui se passe si nous essayons d'insérer une nouvelle valeur en utilisant JSON_REPLACE() :

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

Résultat :

+------------------+| Résultat |+------------------+| {"a":1, "b":2} |+------------------+

Dans ce cas, la nouvelle valeur n'a pas été insérée. Le document JSON d'origine est renvoyé tel quel. En effet, cette fonction remplace uniquement les valeurs existantes - elle n'en insère pas de nouvelles.

Exemple 2 - Mettre à jour une valeur existante

Maintenant, pour mettre à jour les valeurs existantes.

JSON_SET()

Voici ce qui se passe si nous essayons de mettre à jour une valeur existante en utilisant JSON_SET() :

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

Résultat :

+------------------+| Résultat |+------------------+| {"a":1, "b":3} |+-----------------+

Donc encore une fois, cela a parfaitement fonctionné. Nous avons réussi à mettre à jour la deuxième paire clé/valeur avec la nouvelle valeur.

JSON_INSERT()

Voici ce qui se passe si nous essayons de mettre à jour une valeur existante en utilisant JSON_INSERT() :

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

Résultat :

+------------------+| Résultat |+------------------+| {"a":1, "b":2} |+------------------+

Dans ce cas, la valeur existante n'a pas été mise à jour. Le document JSON est renvoyé tel quel. C'est parce que le JSON_INSERT() la fonction insère uniquement de nouvelles valeurs - elle ne met pas à jour les valeurs existantes.

JSON_REPLACE()

Voici ce qui se passe si nous essayons de mettre à jour une valeur existante en utilisant JSON_REPLACE() :

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

Résultat :

+------------------+| Résultat |+------------------+| {"a":1, "b":3} |+-----------------+

Il se met à jour parfaitement.