主にプログラミングに関して。Python, .NET Framework(C#), JavaScript, その他いくらか。
記事にあるサンプルやコードは要検証。使用に際しては責任を負いかねます

MySQLのデータ型にJSON型が加わっていた

                
tags: MySQL
 RSSに入ってくるソフトウェアの更新情報を追っていたらMySQLがデータ型にいつの間にやらJSON型を追加していた。SQLもNoSQLの特徴を取り入れて双方は近づいていくという話どおりのことであるが、ちと試しておく。

 JSON型とはいわゆるJSONドキュメントのことだが、つまりはスキーマレスなデータ型を保存できるというのが大きな特徴。従来のリレーショナルデータベースではサイズが不定になるようなデータは型として基本的になかった、MySQLにはENUMやSETがあったがまあ例外。 JSON型ということは配列だけでなく辞書型のようなものまでデータとして使えるということになる。

 Ubuntu14.04を動かして試してみた。まだデフォルトのリポジトリには最新版が来てなかったので、下記を参考にインストールした。
http://www.devopsservice.com/installation-of-mysql-server-5-7-on-ubuntu-14-04/

 基本的なことはドキュメント参照。
http://dev.mysql.com/doc/refman/5.7/en/json.html
 とりあえず適当なテーブルを作ってみる。テーブルにはフルーツや野菜などの作物を登録することにする。カラムとしてnameに作物の名前を、tagというカラムにJSON型で適当に特徴を記録する。
CREATE TABLE foo (
tag JSON,
name nchar(30)
);


INSERT INTO foo VALUES('["red", "vegetable"]', 'tomato');
INSERT INTO foo VALUES('["green", "vegetable", "long"]', 'cucumber');
INSERT INTO foo VALUES('["yellow", "fruit", "long"]', 'banana');
INSERT INTO foo VALUES('["red", "fruit", "small"]', 'strawberry');
INSERT INTO foo VALUES('["orange", "fruit"]', 'orange');
INSERT INTO foo VALUES('["omg"]', 'durian');


 フルーツを選ぶ。
SELECT * FROM foo WHERE JSON_CONTAINS(tag, '"fruit"');
1510212014248.jpg

 赤いものを選ぶ。
SELECT * FROM foo WHERE JSON_CONTAINS(tag, '"red"');
1510212014505.jpg

 複数条件にしたければ下記のようなクエリも。
SELECT * FROM foo WHERE JSON_CONTAINS(tag, '["red", "small"]');
 赤くない作物とかも。
SELECT * FROM foo WHERE NOT JSON_CONTAINS(tag, '"red"');

 JSON型を導入することで一対多、多対多の導入が中間テーブルなしでできるようになったりする。便利で有効な使い方を考えていきたい。
            

コメントの投稿

非公開コメント

プロフィール

h

Author:h

最新記事
リンク
作ったものなど
月別アーカイブ
カテゴリ
タグリスト

検索フォーム
Amazon