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 は整数で主キーですが、詳細 em> 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を無料でお試しください。