sql >> Database >  >> RDS >> Mysql

JSON_SET() vs JSON_INSERT() vs JSON_REPLACE() in MySQL:wat is het verschil?

In MySQL zijn er een aantal functies waarmee u met JSON-documenten kunt werken. Deze omvatten de JSON_SET() , JSON_INSERT() , en JSON_REPLACE() functies.

Deze drie functies zijn gerelateerd, maar ze verschillen enigszins.

Syntaxis

Ten eerste, hier is de syntaxis voor alle drie de functies:

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

Dus alle drie de functies accepteren dezelfde argumenten. Dit is waar deze argumenten voor zijn:

  • json_doc is het JSON-document.
  • path is het pad van het element waarvoor u gegevens wilt invoegen of de waarde wilt bijwerken.
  • val is de nieuwe waarde.

Het verschil

Dit is het verschil tussen deze functies:

  • JSON_SET() vervangt bestaande waarden en voegt niet-bestaande waarden toe.
  • JSON_INSERT() voegt waarden in zonder bestaande waarden te vervangen.
  • JSON_REPLACE() vervangt alleen bestaande waarden.

Dus welke u gebruikt, hangt af van of u een bestaande waarde bijwerkt of een nieuwe invoegt (hoewel JSON_SET() doet beide).

Voorbeeld 1 – Voer een waarde in

Hier zijn voorbeelden om het verschil tussen deze drie functies te demonstreren.

JSON_SET()

Dit is wat er gebeurt als we proberen een nieuwe waarde in te voegen met JSON_SET() :

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

Resultaat:

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

Dus het werkte perfect.

JSON_INSERT()

Dit is wat er gebeurt als we proberen een nieuwe waarde in te voegen met JSON_INSERT() :

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

Resultaat:

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

Precies hetzelfde resultaat als met JSON_SET() .

JSON_REPLACE()

Dit is wat er gebeurt als we proberen een nieuwe waarde in te voegen met JSON_REPLACE() :

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

Resultaat:

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

In dit geval is de nieuwe waarde niet ingevoegd. Het originele JSON-document wordt ongewijzigd geretourneerd. Dit komt omdat deze functie alleen bestaande waarden vervangt - er worden geen nieuwe ingevoegd.

Voorbeeld 2 – Een bestaande waarde bijwerken

Nu voor het bijwerken van bestaande waarden.

JSON_SET()

Dit is wat er gebeurt als we proberen een bestaande waarde bij te werken met JSON_SET() :

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

Resultaat:

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

Dus nogmaals, het werkte perfect. We hebben het tweede sleutel/waarde-paar geüpdatet met de nieuwe waarde.

JSON_INSERT()

Dit is wat er gebeurt als we proberen een bestaande waarde bij te werken met JSON_INSERT() :

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

Resultaat:

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

In dit geval is de bestaande waarde niet bijgewerkt. Het JSON-document wordt ongewijzigd geretourneerd. Dit komt omdat de JSON_INSERT() functie voegt alleen nieuwe waarden in - het werkt geen bestaande bij.

JSON_REPLACE()

Dit is wat er gebeurt als we proberen een bestaande waarde bij te werken met JSON_REPLACE() :

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

Resultaat:

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

Het wordt perfect bijgewerkt.


  1. Zoek uit of een object een door de gebruiker gedefinieerde tabel in SQL Server is met OBJECTPROPERTY()

  2. Hoe JDBC-configuratie te laden vanuit het eigenschappenbestand Voorbeeld

  3. KIES * WAAR NIET BESTAAT

  4. Kan offset-naïeve en offset-bewuste datetimes niet aftrekken