Mysql
 sql >> Datenbank >  >> RDS >> Mysql

JSON_SET() vs. JSON_INSERT() vs. JSON_REPLACE() in MySQL:Was ist der Unterschied?

In MySQL gibt es eine Reihe von Funktionen, die Ihnen bei der Arbeit mit JSON-Dokumenten helfen. Dazu gehört das JSON_SET() , JSON_INSERT() und JSON_REPLACE() Funktionen.

Diese drei Funktionen sind verwandt, unterscheiden sich jedoch geringfügig.

Syntax

Hier ist zunächst die Syntax für alle drei Funktionen:

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

Alle drei Funktionen akzeptieren also die gleichen Argumente. Hier ist, wofür diese Argumente sind:

  • json_doc ist das JSON-Dokument.
  • path ist der Pfad des Elements, für das Daten eingefügt oder der Wert aktualisiert werden soll.
  • val ist der neue Wert.

Der Unterschied

Hier ist der Unterschied zwischen diesen Funktionen:

  • JSON_SET() ersetzt vorhandene Werte und fügt nicht vorhandene Werte hinzu.
  • JSON_INSERT() fügt Werte ein, ohne vorhandene Werte zu ersetzen.
  • JSON_REPLACE() ersetzt nur vorhandene Werte.

Welchen Sie verwenden, hängt also im Grunde davon ab, ob Sie einen vorhandenen Wert aktualisieren oder einen neuen einfügen (obwohl JSON_SET() macht beides).

Beispiel 1 – Einen Wert einfügen

Hier sind Beispiele, um den Unterschied zwischen diesen drei Funktionen zu demonstrieren.

JSON_SET()

Folgendes passiert, wenn wir versuchen, einen neuen Wert mit JSON_SET() einzufügen :

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

Ergebnis:

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

Es hat also perfekt funktioniert.

JSON_INSERT()

Folgendes passiert, wenn wir versuchen, einen neuen Wert mit JSON_INSERT() einzufügen :

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

Ergebnis:

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

Genau das gleiche Ergebnis wie bei JSON_SET() .

JSON_REPLACE()

Folgendes passiert, wenn wir versuchen, einen neuen Wert mit JSON_REPLACE() einzufügen :

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

Ergebnis:

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

In diesem Fall wurde der neue Wert nicht eingefügt. Das ursprüngliche JSON-Dokument wird unverändert zurückgegeben. Dies liegt daran, dass diese Funktion nur vorhandene Werte ersetzt – sie fügt keine neuen ein.

Beispiel 2 – Aktualisieren eines vorhandenen Werts

Jetzt zum Aktualisieren bestehender Werte.

JSON_SET()

Folgendes passiert, wenn wir versuchen, einen vorhandenen Wert mit JSON_SET() zu aktualisieren :

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

Ergebnis:

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

Also es hat wieder einwandfrei funktioniert. Wir haben das zweite Schlüssel/Wert-Paar erfolgreich mit dem neuen Wert aktualisiert.

JSON_INSERT()

Folgendes passiert, wenn wir versuchen, einen vorhandenen Wert mit JSON_INSERT() zu aktualisieren :

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

Ergebnis:

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

In diesem Fall wurde der vorhandene Wert nicht aktualisiert. Das JSON-Dokument wird unverändert zurückgegeben. Das liegt daran, dass JSON_INSERT() Funktion fügt nur neue Werte ein – sie aktualisiert keine bestehenden.

JSON_REPLACE()

Folgendes passiert, wenn wir versuchen, einen vorhandenen Wert mit JSON_REPLACE() zu aktualisieren :

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

Ergebnis:

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

Es wird perfekt aktualisiert.