sql >> Base de Datos >  >> RDS >> Mysql

JSON_SET() vs JSON_INSERT() vs JSON_REPLACE() en MySQL:¿Cuál es la diferencia?

En MySQL, hay una serie de funciones que le ayudarán a trabajar con documentos JSON. Estos incluyen el JSON_SET() , JSON_INSERT() y JSON_REPLACE() funciones.

Estas tres funciones están relacionadas, pero difieren ligeramente.

Sintaxis

Primero, aquí está la sintaxis para las tres funciones:

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

Así que las tres funciones aceptan los mismos argumentos. Esto es para lo que son estos argumentos:

  • json_doc es el documento JSON.
  • path es la ruta del elemento para el cual insertar datos o actualizar el valor.
  • val es el nuevo valor.

La diferencia

Aquí está la diferencia entre estas funciones:

  • JSON_SET() reemplaza valores existentes y agrega valores inexistentes.
  • JSON_INSERT() inserta valores sin reemplazar los valores existentes.
  • JSON_REPLACE() reemplaza solo los valores existentes.

Entonces, básicamente, cuál use depende de si está actualizando un valor existente o insertando uno nuevo (aunque JSON_SET() hace ambas cosas).

Ejemplo 1:Insertar un valor

Aquí hay ejemplos para demostrar la diferencia entre estas tres funciones.

JSON_SET()

Esto es lo que sucede si intentamos insertar un nuevo valor usando JSON_SET() :

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

Resultado:

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

Así que funcionó perfectamente.

JSON_INSERT()

Esto es lo que sucede si intentamos insertar un nuevo valor usando JSON_INSERT() :

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

Resultado:

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

Exactamente el mismo resultado que con JSON_SET() .

JSON_REPLACE()

Esto es lo que sucede si intentamos insertar un nuevo valor usando JSON_REPLACE() :

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

Resultado:

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

En este caso, el nuevo valor no se insertó. El documento JSON original se devuelve sin cambios. Esto se debe a que esta función solo reemplaza los valores existentes, no inserta nuevos.

Ejemplo 2:actualizar un valor existente

Ahora para actualizar los valores existentes.

JSON_SET()

Esto es lo que sucede si intentamos actualizar un valor existente usando JSON_SET() :

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

Resultado:

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

Así que de nuevo, funcionó perfectamente. Actualizamos con éxito el segundo par clave/valor con el nuevo valor.

JSON_INSERT()

Esto es lo que sucede si intentamos actualizar un valor existente usando JSON_INSERT() :

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

Resultado:

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

En este caso, el valor existente no se actualizó. El documento JSON se devuelve sin cambios. Esto se debe a que JSON_INSERT() La función solo inserta valores nuevos, no actualiza los existentes.

JSON_REPLACE()

Esto es lo que sucede si intentamos actualizar un valor existente usando JSON_REPLACE() :

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

Resultado:

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

Se actualiza perfectamente.