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

MySQLにJSONデータを保存する方法

    MySQLでは、バージョン5.7.8以降、JSONデータをネイティブJSONデータ型で保存できます。これにより、JSONドキュメントを簡単に保存し、データ変換なしでJSONデータ要素を抽出できます。この記事では、JSONデータをMySQLに保存する方法を見ていきます。

    MySQL JSONデータ型を使用すると、JSONデータを格納できるため、キーまたは配列インデックスを使用して値を簡単に読み取ったり検索したりできるため、データが非常に高速になります。データをクエリするためにテキストをJSONに、またはその逆に変換する必要はありません。


    JSONデータをMySQLに保存する方法

    MySQLにJSONデータを格納する方法と、JSONデータ型で列をクエリする方法について説明します。

    JSON列を定義するための構文は次のとおりです

    column_name JSON

    JSONデータ型の列にデフォルト値を設定したり、インデックスを設定したりすることはできません。

    また読む:MySQLでNull値を比較する方法


    MySQLJSONデータ型の例

    これがテーブルの例ですusers(id、details) ここでid は整数で主キーですが、詳細 JSONデータ型の列です。

    create table users(
        id int auto_increment primary key,
        details json
       );


    JSONをMySQLに挿入する方法

    これが、JSONドキュメントをMySQLに保存するためのSQLクエリです。

    insert into users(details)
        values(
          '{ "page": "/" , 
             "name": "Safari", 
             "os": "Mac", 
             "spend": 100, 
             "resolution": { "x": 1920, "y": 1080 } }'
    ),
    (
          '{ "page": "/products", 
             "name": "Chrome", 
             "os": "Windows", 
             "spend": 150,
             "resolution": { "x": 1680, "y": 1050 } }'
    ),
    (
         '{ "page": "/shoes", 
            "name": "Firefox", 
            "os": "Windows", 
            "spend": 200,
            "resolution": { "x": 1280, "y": 800 } }'
    );

    列パス演算子(->)

    を使用してJSON列からデータを抽出します

    各ユーザーのブラウザ名を取得する例を次に示します。

    mysql> select id, details->'$.name' details from users;
    +----+-----------+
    | id | details   |
    +----+-----------+
    |  1 | "Safari"  |
    |  2 | "Chrome"  |
    |  3 | "Firefox" |
    +----+-----------+
    3 rows in set (0.00 sec)
    

    詳細列に二重引用符が付いていることがわかります。二重引用符を削除する場合は、代わりに->>演算子を使用してください

    mysql> select id, details->>'$.name' details from users;
    +----+-----------+
    | id | details   |
    +----+-----------+
    |  1 |  Safari   |
    |  2 |  Chrome   |
    |  3 |  Firefox  |
    +----+-----------+
    3 rows in set (0.00 sec)

    JSONデータのGROUPBY句と集計関数を集計することもできます。データ内のブラウザの数をカウントする例を次に示します。

    mysql> SELECT details->>'$.name' detail,
    count(detail)
    FROM users
    GROUP BY details->>'$.name';

    次の出力が表示されます

    +---------+----------------+
    | details | count(details) |
    +---------+----------------+
    | Safari  |              1 |
    | Firefox |              1 |
    | Chrome  |              1 |
    +---------+----------------+
    3 rows in set (0.02 sec)
    

    同様に、WHERE句でJSONデータを使用することもできます。 支出>100のデータを選択する例を次に示します。

    mysql> SELECT id, SUM(details->>'$.spend') spend
           FROM users
           WHERE details->>'$.spend' > 100
           GROUP BY id;

    この記事が、MySQLでJSONデータを操作するのに役立つことを願っています。 Ubiqを使用すると、データを簡単に視覚化し、リアルタイムのダッシュボードで監視できます。 Ubiqを無料でお試しください。

    1. Railsの移行:列のタイプを文字列から整数に変更しようとしました

    2. XEvent Profilerを使用して、SQLServerでクエリをキャプチャします

    3. Hibernate + PostgreSQL +ネットワークアドレスタイプ(inet、cdir)

    4. MATCHAGAINSTがMariaDBでどのように機能するか