MySQL 操作: JSON データ型の操作

MySQL 操作: JSON データ型の操作

前回の記事では、MySQL データ保存手順パラメータの詳細な例を紹介しました。今日は、JSON データ型に対する MySQL 操作の関連内容を見てみましょう。

概要

MySQL はバージョン 5.7.8 以降、JSON 構造化データの保存とクエリをサポートしており、これは MySQL も NoSQL データベースの利点を継続的に学習して追加していることを示しています。しかし、MySQL は結局のところリレーショナル データベースであり、JSON などの非構造化データを処理する際には依然として扱いにくいです。

JSONフィールドを持つテーブルを作成する

まず、json 形式のフィールドを含むテーブルを作成します。

テーブルテーブル名を作成する (
  id INT NOT NULL AUTO_INCREMENT、 
  json_col JSON、
  主キー(id)
);

上記のステートメントでは、データ型を JSON として指定する json_col フィールドに注意してください。

シンプルなJSONデータを挿入する

挿入する
  テーブル名 (json_col) 
価値観
  ('{"都市": "ゴール", "説明": "世界で最高の都市"}');
  

上記の SQL 文では、VALUES の後の部分に注意してください。JSON 形式のデータでは文字列を識別するために二重引用符が必要なので、VALUES の後の内容を一重引用符で囲む必要があります。

複雑なJSONデータを挿入する

テーブルに挿入(列) 
VALUES('{"opening":"Sicilian","variations":["pelikan","dragon","najdorf"]}');

ここでは、json 配列を挿入しました。重要なのは、一重引用符と二重引用符の問題に注意することです。

JSONデータの変更

前の例では、いくつかの JSON データを挿入しましたが、JSON データ内の特定のコンテンツを変更したい場合はどうすればよいでしょうか。たとえば、バリエーション配列に要素を追加する場合は、次のようにします。

myjson を更新します。SET dict=JSON_ARRAY_APPEND(dict,'$.variations','scheveningen') WHERE id = 2;

この SQL ステートメントでは、$ は JSON フィールドを表し、ドットはバリエーション フィールドのインデックス作成に使用され、その後、JSON_ARRAY_APPEND 関数を使用して要素が追加されます。次にクエリを実行します。

myjsonから*を選択

結果は次のとおりです。

+----+------------------------------------------------------------------------------------------------------+
| ID | 辞書 |
+---+------------------------------------------------------------------------------------------------------+
| 2 | {"opening": "シチリア", "variations": ["ペリカン", "ドラゴン", "ナドルフ", "スケベニンゲン"]} |
+----+------------------------------------------------------------------------------------------------------+
セット内の 1 行 (0.00 秒)

MySQLでJSONデータを取得する方法の詳細については、公式リンクJSONパス構文を参照してください。

インデックスを作成

MySQL の JSON 形式のデータは直接インデックスを作成することはできませんが、検索するデータを別のデータ列に分離し、このフィールドにインデックスを作成することで回避できます。公式の例は次のとおりです。

mysql> テーブル jemp を作成します (
  -> c JSON、
  -> g INTは常に(c->"$.id")として生成されます。
  -> インデックス i (g)
  -> );
クエリは正常、影響を受けた行は 0 行 (0.28 秒)

mysql> jemp (c) 値に挿入
   > ('{"id": "1", "name": "フレッド"}'), ('{"id": "2", "name": "ウィルマ"}'),
   > ('{"id": "3", "name": "バーニー"}'), ('{"id": "4", "name": "ベティ"}');
クエリは正常、4 行が影響を受けました (0.04 秒)
記録: 4 重複: 0 警告: 0

mysql> SELECT c->>"$.name" AS name
   > jemp から g > 2;
+--------+
| 名前 |
+--------+
| バーニー |
| ベティ |
+--------+
セット内の 2 行 (0.00 秒)

mysql> EXPLAIN SELECT c->>"$.name" AS name
   > jemp から g > 2\G
************************** 1. 行 ****************************
      id: 1
 選択タイプ: シンプル
    テーブル: jemp
  パーティション: NULL
     タイプ: 範囲
可能なキー: i
     キー: i
   キーの長さ: 5
     参照: NULL
     行数: 2
   フィルター: 100.00
    追加: where の使用
セットに 1 行、警告 1 件 (0.00 秒)

mysql> 警告を表示\G
************************** 1. 行 ****************************
 レベル: メモ
  コード: 1003
メッセージ: /* select#1 */ select json_unquote(json_extract(`test`.`jemp`.`c`,'$.name'))
AS `name` from `test`.`jemp` where (`test`.`jemp`.`g` > 2)
セット内の 1 行 (0.00 秒)

この例は非常にシンプルです。JSON フィールドの id フィールドを取得し、それをフィールド g に分割します。次に、フィールド g にインデックスが作成され、クエリ条件もフィールド g に設定されます。

文字列をJSON形式に変換する

json 形式の文字列を MySQL の JSON 型に変換します。

SELECT CAST('[1,2,3]'をJSONとして) ;
SELECT CAST('{"opening":"Sicilian","variations":["pelikan","dragon","najdorf"]}' as JSON);

すべてのMySQL JSON関数

名前説明
JSON_APPEND() JSONドキュメントにデータを追加する
JSON_ARRAY() JSON配列を作成する
JSON_ARRAY_APPEND() JSONドキュメントにデータを追加する
JSON_ARRAY_INSERT() JSON 配列に挿入 -> パスを評価した後、JSON 列から値を返します。JSON_EXTRACT() と同等です。
JSON_CONTAINS() JSONドキュメントにパスに特定のオブジェクトが含まれているかどうか
JSON_CONTAINS_PATH() JSONドキュメントにパスにデータが含まれているかどうか
JSON_DEPTH() JSONドキュメントの最大深度
JSON_EXTRACT() JSON ドキュメントからデータを返します ->> パスを評価し、結果を引用符で囲まない後に JSON 列から値を返します。JSON_UNQUOTE(JSON_EXTRACT()) と同等です。
JSON_INSERT() JSONドキュメントにデータを挿入する
JSON_KEYS() JSONドキュメントからのキーの配列
JSON_LENGTH() JSONドキュメント内の要素数
JSON_MERGE()重複キーを保持しながら JSON ドキュメントをマージします。JSON_MERGE_PRESERVE() の非推奨の同義語です。
JSON_MERGE_PRESERVE()重複キーを保持しながらJSONドキュメントをマージする
JSON_OBJECT() JSONオブジェクトを作成する
JSON_QUOTE() JSONドキュメントを引用
JSON_REMOVE() JSONドキュメントからデータを削除する
JSON_REPLACE() JSONドキュメント内の値を置き換える
JSON_SEARCH() JSONドキュメント内の値へのパス
JSON_SET() JSONドキュメントにデータを挿入する
JSON_TYPE() JSON値の型
JSON_UNQUOTE() JSON 値の引用を解除
JSON_VALID() JSON値が有効かどうか

要約する

以上が、MySQL における JSON データ型の操作の詳細説明に関するこの記事の内容です。皆様のお役に立てれば幸いです。興味のある方は、引き続きこのサイトを参照してください。MySQL データ ストレージ プロセス パラメータの詳細な例、Redis と MySQL の違いの簡単な説明、いくつかの重要な MySQL 変数など。不足がある場合は、メッセージを残して指摘してください。編集者は適時に返信して修正し、大多数のプログラミング愛好家と労働者に優れた記事と読書体験を提供するよう努めます。以下に、MySQL 操作に関連する参考書籍をいくつか示します。

MySQL データベース アプリケーション 初心者からマスターまで (第 2 版) PDF スキャン版

https://www.jb51.net/books/361239.html

MySQL5 決定版ガイド (第 3 版) 中国語版 PDF スキャン版

https://www.jb51.net/books/367031.html

気に入っていただければ幸いです。さらに興味深いコンテンツについては、https://www.jb51.net/ をご覧ください。

以下もご興味があるかもしれません:
  • PostgreSQL と MySQL のデータ型の互換性の比較
  • MySQL データ型の最適化の原則
  • MySQL のデータ型とスキーマの最適化の詳細な説明
  • MyBatis JdbcType と Oracle および MySql データ型の対応の説明
  • MySQL データ型 DECIMAL の詳細な分析
  • MySQL のデータ型とフィールド属性の原理と使用法の詳細な説明
  • mysql8.0.19 の基本データ型の詳細な説明
  • MySQL入門(パート2)データベースのデータ型の詳細な説明
  • MySQL データ型 DECIMAL(N,M) における N と M の意味の詳細な説明
  • MySQL データ型の完全分析

<<:  VMWare14.0.0のUbuntu仮想マシンで共有フォルダを設定する

>>:  React-Native環境のセットアップと基本的な紹介

推薦する

MySQL InnoDBエンジンのインデックスとストレージ構造の詳細な説明

序文Oracle や SQL Server などのデータベースには、ストレージ エンジンが 1 つだ...

CSSは高度に適応したフルスクリーンを実現します

独自のデモを作成するときに、display:flex を使用して垂直方向の中央揃えを実現したいと思い...

QT が MYSQL データベースに接続するための詳細な手順

最初のステップは、対応するデータベースモジュール(sql)をプロジェクトファイル( .pro )に追...

MySQL 5.5 のインストールと設定のグラフィックチュートリアル

MySQL 5.5 のインストールと構成のチュートリアル ノートを整理し、全員と共有します。 1.公...

Linux環境変数の設定に関する完全なガイド

Linux環境変数の設定ソフトウェアのインストールをカスタマイズする場合、多くの場合、環境変数を設定...

単一のMySQLテーブルを復元する手順

休憩中に、眠気を完全に吹き飛ばす電話がかかってきました。「開発者が更新 SQL を書くときに whe...

フォームから Vue ElementUI を使用してログイン効果を実装する例

目次1. ElementUIで基本的なスタイルを構築する2. [送信]ボタンをクリックして、アカウン...

無視されたDOCTYPE記述の分析

doctype もその 1 つです。 <!DOCTYPE HTML PUBLIC "...

純粋な CSS3 マインドマップ スタイルの例

マインドマップ彼はおそらく次のように見えるでしょう: インターネット上の実装のほとんどは d3.js...

CSSフロートの特性についての簡単な説明

この記事では、CSS フロートの特徴を紹介します。皆さんと共有し、自分用のメモとして残したいと思いま...

Zabbixを使用してOracleテーブルスペースの操作プロセスを監視する

0. 概要Zabbix は非常に強力なオープンソースの監視ツールです。以下では、Zabbix がテー...

クエリプロファイラを使用して MySQL ステートメントの実行時間を表示する方法

前回の記事では、MySQL ステートメントの実行時間をチェックする 2 つの方法を紹介しました。今日...

Dockerコンテナのデータを復元する方法

プロジェクトのテスト環境データベースのデータが失われてしまったので、記録しておきたいと思います。当時...

デザイナーはコーディングを学ぶ必要がありますか?

多くの場合、 Web デザインが完成した後でデザイナーの無知が露呈し、批判されることがあります。彼ら...

Dockerとイメージの操作方法

ミラーを探すDocker Hubのウェブサイトからイメージを検索できます。Docker Hubのウェ...