sql >> データベース >  >> RDS >> Mysql

MySQLのJSON_SET()とJSON_INSERT()とJSON_REPLACE():違いは何ですか?

    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} |
    +------------------+
    

    完全に更新されます。


    1. SQL Server(T-SQL)で現在のログインIDを取得する

    2. #temptableと##TempTableの違いは?

    3. MySQLパフォーマンスチューニングに関する10の役立つヒント

    4. 配列をMySQLストアドルーチンに渡す