MySQLには、JSONドキュメントの操作に役立つ関数がいくつかあります。これには、JSON_SET()
が含まれます 、JSON_INSERT()
、およびJSON_REPLACE()
機能。
これらの3つの機能は関連していますが、わずかに異なります。
構文
まず、3つの関数すべての構文は次のとおりです。
JSON_SET(json_doc, path, val[, path, val] ...) JSON_INSERT(json_doc, path, val[, path, val] ...) JSON_REPLACE(json_doc, path, val[, path, val] ...)
したがって、3つの関数はすべて同じ引数を受け入れます。これらの議論の目的は次のとおりです。
-
json_doc
JSONドキュメントです。 path
データを挿入したり、値を更新したりする要素のパスです。-
val
は新しい値です。
違い
これらの機能の違いは次のとおりです。
-
JSON_SET()
既存の値を置き換え、存在しない値を追加します。 -
JSON_INSERT()
既存の値を置き換えずに値を挿入します。 -
JSON_REPLACE()
既存の値のみを置き換えます。
したがって、基本的にどちらを使用するかは、既存の値を更新するか、新しい値を挿入するかによって異なります(ただし、JSON_SET()
両方を行います。
例1-値を挿入する
これら3つの機能の違いを示す例を次に示します。
JSON_SET()
JSON_SET()
を使用して新しい値を挿入しようとするとどうなりますか。 :
SELECT JSON_SET('{"a": 1, "b": 2}', '$.c', 3) AS 'Result';
結果:
+--------------------------+ | Result | +--------------------------+ | {"a": 1, "b": 2, "c": 3} | +--------------------------+
完璧に機能しました。
JSON_INSERT()
JSON_INSERT()
を使用して新しい値を挿入しようとするとどうなりますか。 :
SELECT JSON_INSERT('{"a": 1, "b": 2}', '$.c', 3) AS 'Result';
結果:
+--------------------------+ | Result | +--------------------------+ | {"a": 1, "b": 2, "c": 3} | +--------------------------+
JSON_SET()
の場合とまったく同じ結果 。
JSON_REPLACE()
JSON_REPLACE()
を使用して新しい値を挿入しようとするとどうなりますか。 :
SELECT JSON_REPLACE('{"a": 1, "b": 2}', '$.c', 3) AS 'Result';
結果:
+------------------+ | Result | +------------------+ | {"a": 1, "b": 2} | +------------------+
この場合、新しい値は挿入されませんでした。元のJSONドキュメントは変更されずに返されます。これは、この関数が既存の値を置き換えるだけであり、新しい値を挿入しないためです。
例2–既存の値を更新する
次に、既存の値を更新します。
JSON_SET()
JSON_SET()
を使用して既存の値を更新しようとするとどうなりますか。 :
SELECT JSON_SET('{"a": 1, "b": 2}', '$.b', 3) AS 'Result';
結果:
+------------------+ | Result | +------------------+ | {"a": 1, "b": 3} | +------------------+
繰り返しになりますが、完全に機能しました。 2番目のキーと値のペアを新しい値で正常に更新しました。
JSON_INSERT()
JSON_INSERT()
を使用して既存の値を更新しようとするとどうなりますか。 :
SELECT JSON_INSERT('{"a": 1, "b": 2}', '$.b', 3) AS 'Result';
結果:
+------------------+ | Result | +------------------+ | {"a": 1, "b": 2} | +------------------+
この場合、既存の値は更新されませんでした。 JSONドキュメントは変更されずに返されます。これは、JSON_INSERT()
が原因です。 関数は新しい値を挿入するだけで、既存の値は更新しません。
JSON_REPLACE()
JSON_REPLACE()
を使用して既存の値を更新しようとするとどうなりますか。 :
SELECT JSON_REPLACE('{"a": 1, "b": 2}', '$.b', 3) AS 'Result';
結果:
+------------------+ | Result | +------------------+ | {"a": 1, "b": 3} | +------------------+
完全に更新されます。