バナー画像

MySQLではバージョン5.7よりJSONデータを取り扱うための「JSON」というデータ型が登場しました。

本記事では、MySQL環境におけるJSONデータの取り扱い方法に関してサンプルSQLを交えながらご紹介していきたいと思います。

MySQL5.7から利用可能となったJSON型のテーブルを作成してみよう


MySQLでJSON型を使う場合、型の指定に「JSON」と入力するだけで利用が可能です。

MySQL環境としてバージョン5.7以上であることが条件となりますので、まずはインストールされているMySQLのバージョンを下記コマンドで確認しておきましょう。

mysql --version

JSON型を含めたテーブルを作成してみよう

では実際に「CREATE TABLE」コマンドでJSON型を含んだテーブルを作成してみましょう。

create table sample_json(id int, json_data json);

「JSON」と型指定するだけでJSON型が取り扱えるカラムが作成されます。

JSONデータをINSERTしてみよう

作成したテーブルにJSONデータをINSERTしてみましょう。

サンプルSQLは下記の通りとなります。

insert into sample_json values(1, '{"name" : "ポテパン1", "occupation" : "プログラマー"}');
insert into sample_json values(2, '{"name" : "ポテパン2", "occupation" : "デザイナー"}');

JSON形式({“key : value”, …})でデータを指定することでINSERT処理が実行可能です。

MySQL環境でテーブルに登録されたJSON型を操作してみよう


JSON型を持つテーブルの作成とデータのINSERTが完了しましたので、実際にテーブル操作の基本となる「SELECT」「UPDATE」「DELETE」の使い方についてご紹介していきます。

JSON型を使用したテーブルでSELECTコマンドを実行してみよう

テーブル操作の基本となる「SELECT」コマンドから実行してみたいと思います。

select * from sample_json;

サンプルSQLを実行した結果が下記の通りとなります。

+------+---------------------------------------------------------------+
| id   | json_data                                                     |
+------+---------------------------------------------------------------+
|    1 | {"name": "ポテパン1", "occupation": "プログラマー"}              |
|    2 | {"name": "ポテパン2", "occupation": "デザイナー"}                 |
+------+---------------------------------------------------------------+

上述したINSERT文で設定した内容がテーブルに格納されていることをご確認いただけます。

JSON型で定義されたカラムの値をUPDATEしてみよう

次にテーブルに登録済みのJSON型のカラム値を「UPDATE」コマンドで更新してみたいと思います。

update sample_json set json_data ='{"name" :"ポテパン1", "occupation" : "営業" }' where json_data->"$.name" = "ポテパン1";

今回のサンプルではJSON型である「json_data」カラムのkey「name」のvalue値が「ポテパン1」のデータを更新しています。

WHERE句に「カラム名->$.key = value」と指定することで、UPDATEしたい特定のデータのみを更新することが可能です。

ポテパンダの一言メモ

カラム名->$.key = value」の記述法はUPDATEに限らず、SELECTやDELETEでも使えます。

サンプルSQLを実行した結果が下記となります。

+------+------------------------------------------------------------+
| id   | json_data                                                  |
+------+------------------------------------------------------------+
|    1 | {"name": "ポテパン1", "occupation": "営業"}                  |
|    2 | {"name": "ポテパン2", "occupation": "デザイナー"}             |
+------+------------------------------------------------------------+

JSON_SET関数を利用することでJSONの指定した部分のみを更新することが可能

上述したUPDATE文では、SETするJSONデータを変更しない箇所も含めて全て記述する必要がありました。

一方でJSON_SET関数を利用することで、指定した部分のデータのみを更新することも可能です。

「id=1」の名前を「ポテパン1」から「ポテパン1変更」にUPDATEするサンプルSQLです。

update sample_json set json_data = json_set(json_data, "$.name", "ポテパ ン1変更") where id = 1;

実行した結果が下記の通りとなります。

+------+------------------------------------------------------------+
| id   | json_data                                                  |
+------+------------------------------------------------------------+
|    1 | {"name": "ポテパン1変更", "occupation": "営業"}              |
|    2 | {"name": "ポテパン2", "occupation": "デザイナー"}             |
+------+------------------------------------------------------------+
ポテパンダの一言メモ

JSONデータの記述量が多い場合など、JSON_SET関数を利用することでSQL文が読みやすくなることもあるため、状況によって使い分けてみてください。

JSON型のカラム値を指定してデータを削除してみよう

JSON型のカラム値を指定してデータ削除を行ってみましょう。

WHERE句に上述した「カラム名->$.key = value」を指定してデータ削除を行うことも可能ですが、今回は「JSON_EXTRACT」という関数を利用して対象データを指定してみたいと思います。

delete from sample_json where json_extract(json_data, "$.name") = "ポテパン1";

実行した結果が下記の通りとなります。

+------+------------------------------------------------------------+
| id   | json_data                                                  |
+------+------------------------------------------------------------+
|    2 | {"name": "ポテパン2", "occupation": "デザイナー"}             |
+------+------------------------------------------------------------+

指定したJSONの行データが削除されていることがご確認いただけます。

JSON_EXTRACTの使い方は「json_extract(カラム名, “$.key名”)」となります。

JSON_EXTRACTを指定することで、「key」に対する「value」が抽出出来るため、where句の場合には「=」演算子を利用して比較を行っています。

さいごに:MySQLでのJSON型は頻繁には使われない

本記事では、MySQL5.7より利用が可能となっているJSON型の使い方について、サンプルSQLを交えながらご紹介してきました。

JSON型は、MySQLを含むリレーショナルデータベースの基本的な考え方からするとイレギュラーな型定義と言えます。

リレーショナルデータベースのテーブル設計時にJSON型を積極的に使うものではありませんが、実務上JSON型が必要となるケースも考えられるため、使い方については最低限しっかりと理解しておきましょう。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。