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

JSON_INSERT()–MySQLのJSONドキュメントに値を挿入します

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

    最初の引数としてJSONドキュメントを指定し、次に挿入するパス、次に挿入する値を指定します。

    構文

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

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

    場所:

    • json_doc JSONドキュメントです。
    • path は、新しい値を挿入する要素のパスです。
    • val 挿入される新しい値です。

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

    例1-基本的な使用法

    実例を示します。

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

    結果:

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

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

    別の例を次に示します。

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

    結果:

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

    例2–既存のパスを上書きしようとしています

    ドキュメント内の既存のパスのパスと値のペアは無視され、既存のドキュメント値を上書きしません。

    したがって、前の例を変更してNameに値を挿入するとします (すでに存在します)、挿入は行われません:

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

    結果:

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

    例3–アレイ

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

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

    結果:

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

    ただし、アレイにすでに存在するパスを使用する場合、アレイは変更されません。

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

    結果:

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

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

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

    結果:

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

    ただし、繰り返しになりますが、既存のパスに値を挿入しようとしても、JSONドキュメントは変更されません。

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

    結果:

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

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

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

    SET @data = '{  
        "Person": {    
           "Name": "Homer", 
           "Hobbies": ["Eating", "Sleeping"]  
        }
     }';
    SELECT JSON_INSERT(@data, '$.Person.Hobbies[2]', "Base Jumping") AS 'Result';
    

    結果:

    +----------------------------------------------------------------------------------+
    | Result                                                                           |
    +----------------------------------------------------------------------------------+
    | {"Person": {"Name": "Homer", "Hobbies": ["Eating", "Sleeping", "Base Jumping"]}} |
    +----------------------------------------------------------------------------------+
    

    JSON_ARRAY_INSERT()も参照してください およびJSON_ARRAY_APPEND() JSON配列にデータを挿入または追加する必要がある場合。


    1. PostgreSQL 9.1以降でモジュールをインポートしたり拡張機能をインストールしたりするにはどうすればよいですか?

    2. テーブルとしてのPostgres9.4jsonb配列

    3. MySQL、NULLまたは空の文字列を挿入する方が良いですか?

    4. MySQLでは、コミットするまで参照整合性チェックを延期できますか?