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_doces el documento JSON.pathes la ruta del elemento para el cual insertar datos o actualizar el valor.vales 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.