スマートスタイル TECH BLOG

データベース&クラウド技術情報

MariaDB Server で JSON を扱う

本記事は MariaDB Corporation より寄稿された記事となります

はじめに

MariaDB Server では,バージョン 10.2 以降 JSON データ型 が追加され,MySQL の JSON データ型との互換性のために LONGTEXT データ型 への alias となっています。

今回は MariaDB Server における JSON データの基本的な扱い方を解説致します。

実行環境

  • MariaDB Server 10.3.14
  • CentOS 7.6.1810

サンプルテーブルの作成

今回は衣類を販売する店舗における在庫管理テーブルのようなものを作成してみます。
このテーブルには,品名(name),単価(price),在庫数(stock)等,テーブル内のすべての行に存在するデータがあり,従来どおりスキーマで定義されています。

これに対して,品目ごとに異なる意味を持つ属性(色,長さ,サイズ等)を JSONデータ型の attr  列で定義してあります。

ここで,attr 列は内部的には longtext 型であり,無効な JSON データであっても格納できてしまうという問題があります。
この問題に対する方策としては,以下の様に JSON_VALID 関数を CHECK 制約で用いることでデータをチェックすることができます。

正当な JSON データと 不正な JSON データを INSERT し,JSON_VALID 関数をテストしてみます。

最後の INSERT 文における JSON データでは,white 直後の ” (二重引用符) が欠落しており,エラーが発生していますので,CHECK 制約は正常に機能しているようです。

訂正したデータを INSERT してみます。

エラーは発生せず,問題なくデータを INSERT することができました。

JSONデータへのインデックスの作成

JSON 文字列中の個々の属性データにインデックスを作成するには,Virtual Column (仮想列) を用いることで可能です。

color 属性のインデックスを作成するには,attr 列から JSON_VALUE で抽出された color 属性に対する仮想列が必要となります。
以下のように仮想列とインデックスを追加することができます。

attr_color 列で検索を行ってみます。

さらに EXPLAIN で実行計画を確認してみます。

JSON データの更新

ブラウス(Blouse)の色を白から赤に更新し,attr_color 列 が attr 列に依存していることを確認してみます。
JSON オブジェクトの値を置換するには,JSON_REPLACE 関数を用います。

正常にブラウスの色が赤に変更されていることが確認できました。

まとめ

今回は MariaDB Server 10.2 以降でサポートされている JSON データ型に関して基本的な利用法を解説いたしました。


執筆者情報

後藤 智(GOTO Satoru)
2017年6月よりMariaDB CorporationにてAPAC(Asia Pacific)地域におけるプリセールス業務を主に担当。現在は主に日本を担当。
この執筆者の他の記事をよむ
Return Top