No MySQL, há várias funções para ajudar você a trabalhar com documentos JSON. Isso inclui o
JSON_SET() , JSON_INSERT() e JSON_REPLACE() funções. Essas três funções estão relacionadas, mas diferem um pouco.
Sintaxe
Primeiro, aqui está a sintaxe para todas as três funções:
JSON_SET(json_doc, path, val[, path, val] ...)JSON_INSERT(json_doc, path, val[, path, val] ...)JSON_REPLACE(json_doc, path, val[, path, val] ...)
Portanto, todas as três funções aceitam os mesmos argumentos. Veja para que servem esses argumentos:
json_docé o documento JSON.pathé o caminho do elemento para o qual inserir dados ou atualizar o valor.valé o novo valor.
A diferença
Aqui está a diferença entre essas funções:
JSON_SET()substitui valores existentes e adiciona valores inexistentes.JSON_INSERT()insere valores sem substituir valores existentes.JSON_REPLACE()substitui apenas os valores existentes.
Então, basicamente, qual você usa depende se você está atualizando um valor existente ou inserindo um novo (embora
JSON_SET() faz os dois). Exemplo 1 – Inserir um valor
Aqui estão exemplos para demonstrar a diferença entre essas três funções.
JSON_SET()
Aqui está o que acontece se tentarmos inserir um novo valor usando
JSON_SET() :SELECT JSON_SET('{"a":1, "b":2}', '$.c', 3) AS 'Result'; Resultado:
+--------------------------+| Resultado |+--------------------------+| {"a":1, "b":2, "c":3} |+--------------------------+
Então funcionou perfeitamente.
JSON_INSERT()
Veja o que acontece se tentarmos inserir um novo valor usando JSON_INSERT() :
SELECT JSON_INSERT('{"a":1, "b":2}', '$.c', 3) AS 'Result';
Resultado:
+--------------------------+| Resultado |+--------------------------+| {"a":1, "b":2, "c":3} |+--------------------------+
Exatamente o mesmo resultado que com JSON_SET() .
JSON_REPLACE()
Veja o que acontece se tentarmos inserir um novo valor usando JSON_REPLACE() :
SELECT JSON_REPLACE('{"a":1, "b":2}', '$.c', 3) AS 'Resultado';
Resultado:
+------------------+| Resultado |+------------------+| {"a":1, "b":2} |+------------------+
Neste caso, o novo valor não foi inserido. O documento JSON original é retornado inalterado. Isso ocorre porque essa função apenas substitui valores existentes – ela não insere novos.
Exemplo 2 – Atualizar um valor existente
Agora para atualizar os valores existentes.
JSON_SET()
Aqui está o que acontece se tentarmos atualizar um valor existente usando JSON_SET() :
SELECT JSON_SET('{"a":1, "b":2}', '$.b', 3) AS 'Result';
Resultado:
+------------------+| Resultado |+------------------+| {"a":1, "b":3} |+------------------+
Então, novamente, funcionou perfeitamente. Atualizamos com sucesso o segundo par chave/valor com o novo valor.
JSON_INSERT()
Veja o que acontece se tentarmos atualizar um valor existente usando JSON_INSERT() :
SELECT JSON_INSERT('{"a":1, "b":2}', '$.b', 3) AS 'Resultado';
Resultado:
+------------------+| Resultado |+------------------+| {"a":1, "b":2} |+------------------+
Neste caso, o valor existente não foi atualizado. O documento JSON é retornado inalterado. Isso ocorre porque o JSON_INSERT() A função apenas insere novos valores – ela não atualiza os existentes.
JSON_REPLACE()
Veja o que acontece se tentarmos atualizar um valor existente usando JSON_REPLACE() :
SELECT JSON_REPLACE('{"a":1, "b":2}', '$.b', 3) AS 'Resultado';
Resultado:
+------------------+| Resultado |+------------------+| {"a":1, "b":3} |+------------------+
Atualiza perfeitamente.