sql >> Databasteknik >  >> RDS >> Mysql

JSON_SET() vs JSON_INSERT() vs JSON_REPLACE() i MySQL:Vad är skillnaden?

I MySQL finns det ett antal funktioner som hjälper dig att arbeta med JSON-dokument. Dessa inkluderar JSON_SET() , JSON_INSERT() , och JSON_REPLACE() funktioner.

Dessa tre funktioner är relaterade, men de skiljer sig något åt.

Syntax

Först, här är syntaxen för alla tre funktionerna:

JSON_SET(json_doc, sökväg, val[, sökväg, val] ...)JSON_INSERT(json_doc, sökväg, val[, sökväg, val] ...)JSON_REPLACE(json_doc, sökväg, val[, sökväg, val] ...)

Så alla tre funktioner accepterar samma argument. Här är vad dessa argument är till för:

  • json_doc är JSON-dokumentet.
  • path är sökvägen till elementet för vilket data ska infogas eller uppdateras värdet på.
  • val är det nya värdet.

Skillnaden

Här är skillnaden mellan dessa funktioner:

  • JSON_SET() ersätter befintliga värden och lägger till icke-existerande värden.
  • JSON_INSERT() infogar värden utan att ersätta befintliga värden.
  • JSON_REPLACE() ersätter endast befintliga värden.

Så i princip vilket du använder beror på om du uppdaterar ett befintligt värde eller infogar ett nytt (även om JSON_SET() gör båda).

Exempel 1 – Infoga ett värde

Här är exempel för att visa skillnaden mellan dessa tre funktioner.

JSON_SET()

Här är vad som händer om vi försöker infoga ett nytt värde med JSON_SET() :

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

Resultat:

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

Så det fungerade perfekt.

JSON_INSERT()

Här är vad som händer om vi försöker infoga ett nytt värde med JSON_INSERT() :

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

Resultat:

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

Exakt samma resultat som med JSON_SET() .

JSON_REPLACE()

Här är vad som händer om vi försöker infoga ett nytt värde med JSON_REPLACE() :

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

Resultat:

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

I det här fallet infogades inte det nya värdet. Det ursprungliga JSON-dokumentet returneras oförändrat. Detta beror på att den här funktionen bara ersätter befintliga värden – den infogar inte nya.

Exempel 2 – Uppdatera ett befintligt värde

Nu för att uppdatera befintliga värden.

JSON_SET()

Här är vad som händer om vi försöker uppdatera ett befintligt värde med JSON_SET() :

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

Resultat:

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

Så igen, det fungerade perfekt. Vi har framgångsrikt uppdaterat det andra nyckel/värdeparet med det nya värdet.

JSON_INSERT()

Här är vad som händer om vi försöker uppdatera ett befintligt värde med JSON_INSERT() :

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

Resultat:

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

I det här fallet uppdaterades inte det befintliga värdet. JSON-dokumentet returneras oförändrat. Detta beror på att JSON_INSERT() Funktionen infogar bara nya värden – den uppdaterar inte befintliga.

JSON_REPLACE()

Här är vad som händer om vi försöker uppdatera ett befintligt värde med JSON_REPLACE() :

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

Resultat:

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

Den uppdaterar perfekt.


  1. Relationellt databashanteringssystem (RDBMS):MSSQL vs MySQL

  2. sp_add_schedule vs sp_add_jobschedule i SQL Server:Vad är skillnaden?

  3. Hur man byter namn på ett kolumnnamn eller tabellnamn i SQL Server - SQL Server / T-SQL självstudie del 36

  4. Hur infogar/uppdaterar man större data i Oracle-tabellerna?