MySQL 5.7 JSON 型の使用の詳細

MySQL 5.7 JSON 型の使用の詳細

JSON は、言語に依存しないテキスト形式を使用する軽量のデータ交換形式で、XML に似ていますが、XML よりもシンプルで、読み書きが簡単です。マシンによる解析と生成が容易になり、ネットワーク帯域幅の伝送が削減されます。

JSON の形式は非常にシンプルです: 名前/キー値。以前の MySQL バージョンでは、このようなストレージを実装するために、VARCHAR または TEXT のラージ テキストが使用されていました。 MySQL 5.7 のリリース以降、JSON データ型と、この型の取得およびその他の関数解析が特別に設計されました。 まず、MySQL の古いバージョンでの JSON アクセスについて見てみましょう。

テーブル構造の例:

テーブルjson_testを作成します( 
id INT、 
person_desc テキスト 
)エンジン INNODB;

レコードを挿入してみましょう:

json_test VALUES に NSERT (1,'{ 
  「プログラマー」: [{ 
    "firstName": "ブレット", 
    "姓": "マクラフリン", 
    「メール」:「aaaa」 
  }, { 
    "firstName": "ジェイソン", 
    "姓": "ハンター", 
    「メール」:「bbbb」 
  }, { 
    "firstName": "エリオット", 
    "姓": "ハロルド", 
    「メール」:「cccc」 
  }], 
  「著者」: [{ 
    "firstName": "アイザック", 
    "lastName": "アシモフ", 
    「ジャンル」:「SF」 
  }, { 
    "firstName": "タッド", 
    "姓": "ウィリアムズ", 
    「ジャンル」:「ファンタジー」 
  }, { 
    "firstName": "フランク", 
    "姓": "ペレッティ", 
    「ジャンル」:「キリスト教フィクション」 
  }], 
  「ミュージシャン」: [{ 
    "firstName": "エリック", 
    "姓": "クラプトン", 
    「楽器」:「ギター」 
  }, { 
    "firstName": "セルゲイ", 
    "lastName": "ラフマニノフ", 
    「楽器」:「ピアノ」 
  }] 
}');

一般的に言えば、JSON 形式のこのようなストレージに遭遇した場合、このレコードを取り出してアプリケーションに渡し、解析するしかありません。

MySQL 5.7 では、次のテーブル構造を変更します。

ALTER TABLE json_test MODIFY person_desc json;

まず、挿入された JSON データのキーを見てみましょう。

mysql> id、json_keys(person_desc) を "keys" として json_test\G から選択します 
************************** 1. 行 **************************** 
 id: 1 
キー: ["著者", "ミュージシャン", "プログラマー"] 
 セット内の行数 (0.00 秒)

著者、ミュージシャン、プログラマーという 3 つのキーがあることがわかります。次に、KEY を見つけて、対応する値を取得します。

mysql> SELECT json_extract(AUTHORS,'$.lastName[0]') AS 'name', AUTHORS FROM 
  -> ( 
  -> SELECT id,json_extract(person_desc,'$.authors[0][0]') AS "authors" FROM json_test 
  -> すべてを結合 
  -> SELECT id,json_extract(person_desc,'$.authors[1][0]') AS "authors" FROM json_test 
  -> すべてを結合 
  -> SELECT id,json_extract(person_desc,'$.authors[2][0]') AS "authors" FROM json_test 
  -> ) AS T1 
  -> 名前順で並べ替え\G 
************************** 1. 行 **************************** 
  名前: 「ウィリアムズ」 
著者: {"genre": "fantasy", "lastName": "Williams", "firstName": "Tad"} 
************************** 2. 行 **************************** 
  名前: 「ペレッティ」 
著者: {"genre": "christianfiction", "lastName": "Peretti", "firstName": "Frank"} 
************************** 3. 行 **************************** 
  名前:「アシモフ」 
著者: {"genre": "sciencefiction", "lastName": "Asimov", "firstName": "Isaac"} 
セット内の 3 行 (0.00 秒)

それでは、詳細な値をリストしてみましょう。

mysql> 選択 
  -> json_extract(AUTHORS,'$.firstName[0]') AS "firstname", 
  -> json_extract(AUTHORS,'$.lastName[0]') AS "lastname", 
  -> json_extract(AUTHORS,'$.genre[0]') AS "ジャンル" 
  -> から 
  -> ( 
  -> SELECT id,json_extract(person_desc,'$.authors[0]') AS "authors" FROM json 
_テスト 
  -> ) AS T\G 
************************** 1. 行 **************************** 
名:「アイザック」 
 姓:「アシモフ」 
  ジャンル: 「SF」 
 セット内の行数 (0.00 秒)

さらに、KEY 作成者に対応するすべてのオブジェクトを削除する方法を説明します。

mysql> json_test を更新 
  -> SET person_desc = json_remove(person_desc,'$.authors')\G 
クエリは正常、1 行が影響を受けました (0.01 秒) 
一致した行: 1 変更された行: 1 警告: 0

対応するKEYを検索したところ、削除されていたことがわかりました。

mysql> json_contains_path(person_desc,'all','$.authors') を authors_exist として選択します 
json_test_G からのs 
************************** 1. 行 **************************** 
著者の存在: 0 
 セット内の行数 (0.00 秒)

まとめると、MySQL 5.7 では JSON データ型のサポートが開始されましたが、これを使用する場合は、このような値を取り出してアプリケーション セクションで計算するのが最善であると私は提案します。結局のところ、データベースは単純なデータを処理するために使用します。

要約する

上記は、編集者が紹介したMySQL 5.7 JSON型の使用に関する詳細な説明です。皆様のお役に立てれば幸いです。ご質問がある場合は、メッセージを残してください。編集者がすぐに返信します。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。

以下もご興味があるかもしれません:
  • MySQL 5.7 における基本的な JSON 操作ガイド
  • Mysql5.7 で JSON 操作関数を使用する手順
  • MySQL 5.7 JSON形式の取得に関する簡単な説明
  • mysql5.6 以前のデータベースで json をクエリする方法
  • MySQLにおけるJSON系列操作関数の詳しい説明
  • MySQL 操作: JSON データ型の操作
  • MySQL の JSON 挿入の問題
  • MySQL (5.6 以下) の JSON 解析の詳細な例
  • mysql5.7 の新しい json フィールド タイプの使用例の分析

<<:  Dockerが独自のローカルイメージリポジトリを構築するための手順

>>:  CentOS での Docker の詳細なインストール チュートリアル

推薦する

カルーセルカルーセルケースのJS実装

この記事の例では、カルーセルカルーセルを実装するためのJSの具体的なコードを参考までに共有しています...

MySQLマスタースレーブデータベース構築方法の詳細な説明

この記事では、MySQL マスター/スレーブ データベースの構築方法について説明します。ご参考までに...

html-webpack-plugin' を使用してメモリ内に HTML ページ プラグインを生成します。

webpackjs ファイルをパッケージ化するときに、次に示すように、index.html インタ...

1 行のコードでさまざまな IE 互換性の問題を解決します (IE6-IE10)

x-ua-compatible は、IE ブラウザがページを解析およびコンパイルするためのモデルを...

MYSQL(電話番号、IDカード)データ非感応化の実装

1. データ感度低下の説明日常の開発ニーズでは、データの感度低下が頻繁に発生します。たとえば、ID ...

JS関数の呼び出し、適用、バインドの超詳細な方法

目次JS 関数呼び出し、適用、バインドメソッド1. call() メソッド1. call() メソッ...

Centos7.X Linux システムに tomcat8 をインストールするためのグラフィック チュートリアル

1. Tomcatのインストールパスを作成する mkdir /usr/local/tomcat 2....

ルート権限なしでログインするためのDockerソリューション

docker コマンドを初めて使用する場合、権限の問題を確認するメッセージが表示されます。 unix...

仮想マシン VMware に Kali Linux をインストールする最新の超詳細なグラフィック チュートリアル

目次1. システムイメージファイルをダウンロードする2. 新しい仮想マシンを作成する3. Kali ...

スネークゲームを作るための Pygame コード

目次使用されるPygame関数スクリーンの作成ヘビの作成ヘビを動かすゲームオーバーの処理食事を増やす...

美しいチェックボックススタイル(複数選択ボックス)はIE8/9/10、FFなどと完全に互換性があります。

恥ずかしながら、このようなよく使われるチェックボックスのスタイルを変更するために、Baidu で長い...

CSS の div の下の同じ行にある複数の要素を右揃えにする

方法1:フロート:右さらに、フローティングにするとレイアウトがよりコンパクトになります(隙間がなくな...

9999px に別れを告げる新しい CSS 画像置換テクニック (背景表示と画面外へのテキストの移動)

-9999 ピクセルの画像置換技術は、ここ 10 年近く人気があります。テキスト要素を画像に置き換え...

複合主キーと複数列インデックスに遭遇した場合の MySQL 行ロックの詳細な説明

背景今日、他のプロジェクト チームと協力してシス​​テムのストレス テストを実施しているときに、プロ...

ドメイン名を介してプロジェクトにアクセスするnginx + tomcatの例

ドメイン名を使ってプロジェクトにアクセスする方法が気になったのですが、自分でドメイン名を取得するのは...