W MySQL dostępnych jest wiele funkcji ułatwiających pracę z dokumentami JSON. Należą do nich JSON_SET() , JSON_INSERT() i JSON_REPLACE() funkcje.
Te trzy funkcje są ze sobą powiązane, ale nieznacznie się różnią.
Składnia
Po pierwsze, oto składnia wszystkich trzech funkcji:
JSON_SET(json_doc, path, val[, path, val] ...) JSON_INSERT(json_doc, path, val[, path, val] ...) JSON_REPLACE(json_doc, path, val[, path, val] ...)
Więc wszystkie trzy funkcje akceptują te same argumenty. Oto, do czego służą te argumenty:
json_docjest dokumentem JSON.pathjest ścieżką elementu, dla którego należy wstawić dane lub zaktualizować wartość.valto nowa wartość.
Różnica
Oto różnica między tymi funkcjami:
JSON_SET()zastępuje istniejące wartości i dodaje nieistniejące wartości.JSON_INSERT()wstawia wartości bez zastępowania istniejących wartości.JSON_REPLACE()zastępuje tylko istniejące wartości.
Zasadniczo więc to, którego używasz, zależy od tego, czy aktualizujesz istniejącą wartość, czy wstawiasz nową (chociaż JSON_SET() robi jedno i drugie).
Przykład 1 – Wstaw wartość
Oto przykłady pokazujące różnicę między tymi trzema funkcjami.
JSON_SET()
Oto, co się stanie, jeśli spróbujemy wstawić nową wartość za pomocą JSON_SET() :
SELECT JSON_SET('{"a": 1, "b": 2}', '$.c', 3) AS 'Result';
Wynik:
+--------------------------+
| Result |
+--------------------------+
| {"a": 1, "b": 2, "c": 3} |
+--------------------------+
Więc zadziałało idealnie.
JSON_INSERT()
Oto, co się stanie, jeśli spróbujemy wstawić nową wartość za pomocą JSON_INSERT() :
SELECT JSON_INSERT('{"a": 1, "b": 2}', '$.c', 3) AS 'Result';
Wynik:
+--------------------------+
| Result |
+--------------------------+
| {"a": 1, "b": 2, "c": 3} |
+--------------------------+
Dokładnie taki sam wynik jak w przypadku JSON_SET() .
JSON_REPLACE()
Oto, co się stanie, jeśli spróbujemy wstawić nową wartość za pomocą JSON_REPLACE() :
SELECT JSON_REPLACE('{"a": 1, "b": 2}', '$.c', 3) AS 'Result';
Wynik:
+------------------+
| Result |
+------------------+
| {"a": 1, "b": 2} |
+------------------+
W tym przypadku nowa wartość nie została wstawiona. Oryginalny dokument JSON jest zwracany bez zmian. Dzieje się tak, ponieważ ta funkcja zastępuje tylko istniejące wartości – nie wstawia nowych.
Przykład 2 – Aktualizacja istniejącej wartości
Teraz do aktualizacji istniejących wartości.
JSON_SET()
Oto, co się stanie, jeśli spróbujemy zaktualizować istniejącą wartość za pomocą JSON_SET() :
SELECT JSON_SET('{"a": 1, "b": 2}', '$.b', 3) AS 'Result';
Wynik:
+------------------+
| Result |
+------------------+
| {"a": 1, "b": 3} |
+------------------+
Więc znowu zadziałało idealnie. Pomyślnie zaktualizowaliśmy drugą parę klucz/wartość o nową wartość.
JSON_INSERT()
Oto, co się stanie, jeśli spróbujemy zaktualizować istniejącą wartość za pomocą JSON_INSERT() :
SELECT JSON_INSERT('{"a": 1, "b": 2}', '$.b', 3) AS 'Result';
Wynik:
+------------------+
| Result |
+------------------+
| {"a": 1, "b": 2} |
+------------------+
W tym przypadku istniejąca wartość nie została zaktualizowana. Dokument JSON jest zwracany bez zmian. Dzieje się tak, ponieważ JSON_INSERT() funkcja wstawia tylko nowe wartości – nie aktualizuje już istniejących.
JSON_REPLACE()
Oto, co się stanie, jeśli spróbujemy zaktualizować istniejącą wartość za pomocą JSON_REPLACE() :
SELECT JSON_REPLACE('{"a": 1, "b": 2}', '$.b', 3) AS 'Result';
Wynik:
+------------------+
| Result |
+------------------+
| {"a": 1, "b": 3} |
+------------------+
Aktualizuje się doskonale.