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.