Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

JSON_SET() vs JSON_INSERT() vs JSON_REPLACE() no MySQL:Qual é a diferença?


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.