sql >> Database teknologi >  >> RDS >> Mysql

JSON_SET() vs JSON_INSERT() vs JSON_REPLACE() i MySQL:Hvad er forskellen?

I MySQL er der en række funktioner, der hjælper dig med at arbejde med JSON-dokumenter. Disse inkluderer JSON_SET() , JSON_INSERT() og JSON_REPLACE() funktioner.

Disse tre funktioner er relaterede, men de adskiller sig en smule.

Syntaks

For det første er her syntaksen for alle tre funktioner:

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

Så alle tre funktioner accepterer de samme argumenter. Her er, hvad disse argumenter er til:

  • json_doc er JSON-dokumentet.
  • path er stien til det element, som der skal indsættes data for eller opdatere værdien ved.
  • val er den nye værdi.

Forskellen

Her er forskellen mellem disse funktioner:

  • JSON_SET() erstatter eksisterende værdier og tilføjer ikke-eksisterende værdier.
  • JSON_INSERT() indsætter værdier uden at erstatte eksisterende værdier.
  • JSON_REPLACE() erstatter kun eksisterende værdier.

Så dybest set, hvilken en du bruger afhænger af, om du opdaterer en eksisterende værdi eller indsætter en ny (selvom JSON_SET() gør begge dele).

Eksempel 1 – Indsæt en værdi

Her er eksempler for at demonstrere forskellen mellem disse tre funktioner.

JSON_SET()

Her er, hvad der sker, hvis vi forsøger at indsætte en ny værdi ved hjælp af JSON_SET() :

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

Resultat:

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

Så det fungerede perfekt.

JSON_INSERT()

Her er, hvad der sker, hvis vi forsøger at indsætte en ny værdi ved hjælp af JSON_INSERT() :

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

Resultat:

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

Præcis det samme resultat som med JSON_SET() .

JSON_REPLACE()

Her er, hvad der sker, hvis vi forsøger at indsætte en ny værdi ved hjælp af JSON_REPLACE() :

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

Resultat:

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

I dette tilfælde blev den nye værdi ikke indsat. Det originale JSON-dokument returneres uændret. Dette skyldes, at denne funktion kun erstatter eksisterende værdier - den indsætter ikke nye.

Eksempel 2 – Opdater en eksisterende værdi

Nu til opdatering af eksisterende værdier.

JSON_SET()

Her er, hvad der sker, hvis vi forsøger at opdatere en eksisterende værdi ved hjælp af JSON_SET() :

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

Resultat:

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

Så igen fungerede det perfekt. Vi har opdateret det andet nøgle/værdi-par med den nye værdi.

JSON_INSERT()

Her er, hvad der sker, hvis vi forsøger at opdatere en eksisterende værdi ved hjælp af JSON_INSERT() :

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

Resultat:

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

I dette tilfælde blev den eksisterende værdi ikke opdateret. JSON-dokumentet returneres uændret. Dette skyldes, at JSON_INSERT() funktion indsætter kun nye værdier – den opdaterer ikke eksisterende.

JSON_REPLACE()

Her er, hvad der sker, hvis vi forsøger at opdatere en eksisterende værdi ved hjælp af JSON_REPLACE() :

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

Resultat:

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

Den opdaterer perfekt.


  1. Sådan fungerer Unicode() i SQLite

  2. Implementering af PostgreSQL på en Docker-container

  3. Hvordan sletter man store data i tabellen i SQL uden log?

  4. Viser billede i Ireports ved hjælp af PostgreSql