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

JSON_SET()–MySQLのJSONドキュメントに値を挿入または更新します

    MySQLでは、JSON_SET() 関数はJSONドキュメントに値を挿入または更新し、結果を返します。

    最初の引数としてJSONドキュメントを指定し、その後に挿入するパス、挿入する値を指定します。複数の値を更新する必要がある場合は、複数のパスと値のペアを提供できます。

    構文

    構文は次のようになります:

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

    場所:

    • json_doc JSONドキュメントです。
    • path データを挿入したり、値を更新したりする要素のパスです。
    • val は新しい値です。

    パスと値のペアは左から右に評価されます。 1つのペアを評価することによって作成されたドキュメントは、次のペアが評価される新しい値になります。

    最初の引数が有効なJSONドキュメントでない場合、またはいずれかのパス引数が有効なパス式ではないか、*が含まれている場合、エラーが発生します または** ワイルドカード。

    例1-値を挿入する

    この関数を使用して値を挿入する方法を示す例を次に示します。

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

    結果:

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

    この場合、3番目の引数は指定されたパスで配列に挿入されます。 $.cを使用しています パスと3 挿入する値。これにより、キーと値のペアが"c": 3になります。 。

    別の例を次に示します。

    SELECT 
      JSON_SET('{"Name": "Homer", "Gender": "Male"}', '$.Age', 39) AS 'Result';
    

    結果:

    +------------------------------------------------+
    | Result                                         |
    +------------------------------------------------+
    | {"Age": 39, "Name": "Homer", "Gender": "Male"} |
    +------------------------------------------------+
    

    例2–値を更新する

    前の例では、値を挿入しました。この例では、既存の値を更新します。

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

    結果:

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

    別の例を次に示します。

    SELECT 
      JSON_SET('{"Name": "Homer", "Gender": "Male"}', '$.Name', "Bart") AS 'Result';
    

    結果:

    +------------------------------------+
    | Result                             |
    +------------------------------------+
    | {"Name": "Bart", "Gender": "Male"} |
    +------------------------------------+
    

    例3–アレイ

    既存の配列の終わりを超えたパスを使用して、配列に値を挿入できます。例:

    SELECT JSON_SET('[1, 2, 3]', '$[3]', 4) AS 'Result';
    

    結果:

    +--------------+
    | Result       |
    +--------------+
    | [1, 2, 3, 4] |
    +--------------+
    

    ただし、アレイにすでに存在するパスを使用すると、値が更新されます。

    SELECT JSON_SET('[1, 2, 3]', '$[1]', 4) AS 'Result';
    

    結果:

    +-----------+
    | Result    |
    +-----------+
    | [1, 4, 3] |
    +-----------+
    

    既存の値が配列でない場合は、配列として自動ラップされてから、新しい値で拡張されます。例:

    SELECT JSON_SET('{"a": 1, "b": 2}', '$[2]', 3) AS 'Result';
    

    結果:

    +-----------------------+
    | Result                |
    +-----------------------+
    | [{"a": 1, "b": 2}, 3] |
    +-----------------------+
    

    例4–複数の値

    一度に複数の値を挿入/更新できます。キーと値の各ペアをコンマで区切って追加するだけです。例:

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

    結果:

    +-------------------------------+
    | Result                        |
    +-------------------------------+
    | {"a": 9, "b": 2, "c": "Bart"} |
    +-------------------------------+
    

    例5–より大きなJSONドキュメント

    これは(少し)大きいJSONドキュメントの例です。

    SET @data = '{  
        "Person": {    
           "Name": "Homer", 
           "Hobbies": ["Eating", "Sleeping"]  
        }
     }';
    SELECT JSON_SET(@data, '$.Person.Name', 'Bart', '$.Person.Hobbies[1]', "Mischief") AS 'Result';
    

    結果:

    +-----------------------------------------------------------------+
    | Result                                                          |
    +-----------------------------------------------------------------+
    | {"Person": {"Name": "Bart", "Hobbies": ["Eating", "Mischief"]}} |
    +-----------------------------------------------------------------+
    
    >

    JSON_INSERT()も参照してください 既存の値を置き換えずに値を挿入する場合、およびJSON_REPLACE() 既存の値のみを置き換えるため。


    1. PostgreSQLの主キーを1にリセットします

    2. バイナリ照合を使用するとどのような影響がありますか?

    3. 無効な構文エラータイプ=Hibernateによって生成されたDDLのMyISAM

    4. READ UNCOMMITTED分離レベルを使用するのはなぜですか?