MySQLでJSONフィールドを操作する方法

MySQLでJSONフィールドを操作する方法

MySQL 5.7.8 では json フィールドが導入されました。このタイプのフィールドは使用頻度は低くなりますが、実際の運用では一部の企業ではまだ使用されています。これを例にして、json フィールドの操作方法を紹介します。

例から始めましょう:

mysql> テーブル test1(id int、info json) を作成します。
クエリは正常、影響を受けた行は 0 行 (0.02 秒)

mysql> test1 に値を挿入します (1,'{"name":"yeyz","age":26}'),(2,'{"name":"zhangsan","age":30}'),(3,'{"name":"lisi","age":35}');
クエリは正常、3 行が影響を受けました (0.02 秒)
記録: 3 重複: 0 警告: 0

mysql> test1 から * を選択します。
+------+---------------------------------+
| ID | 情報 |
+------+---------------------------------+
| 1 | {"年齢": 26, "名前": "yeyz"} |
| 2 | {"年齢": 30, "名前": "zhangsan"} |
| 3 | {"年齢": 35, "名前": "lisi"} |
+------+---------------------------------+
セット内の 3 行 (0.00 秒)

まず、id が int フィールド、info が json フィールドであるテーブル test1 を作成し、上に示すように 3 つのデータを挿入しました。

mysql> test1 から * を選択します。 where json_extract(info,"$.age")>=30;
+------+---------------------------------+
| ID | 情報 |
+------+---------------------------------+
| 2 | {"年齢": 30, "名前": "zhangsan"} |
| 3 | {"年齢": 35, "名前": "lisi"} |
+------+---------------------------------+
セット内の 2 行 (0.00 秒)

json_extract メソッドを使用して、json 形式のコンテンツを取得できます。で:

1. $ 記号は json のルート ディレクトリを表します。

2. json の age フィールドを削除するのと同じ効果を持つ $.age を使用します。

3. もちろん、関数の先頭にはフィールド名情報を書き込む必要があります。

json でよく使われる関数を見てみましょう。

a. json_valid は、それが json フィールドであるかどうかを判断します。そうであれば 1 を返し、そうでない場合は 0 を返します。

mysql> json_valid(2) を選択します。
+---------------+
| json_valid(2) |
+---------------+
| 0 |
+---------------+
セット内の1行(0.01秒)
mysql> json_valid('{"num":2}') を選択します。
+-------------------------+
| json_valid('{"num":2}') |
+-------------------------+
| 1 |
+-------------------------+
セット内の 1 行 (0.00 秒)

mysql> json_valid('2') を選択します。
+-----------------+
| json_valid('2') |
+-----------------+
| 1 |
+-----------------+
セット内の 1 行 (0.00 秒)
mysql> json_valid('name') を選択します。
+--------------------+
| json_valid('名前') |
+--------------------+
| 0 |
+--------------------+
セット内の 1 行 (0.00 秒)

ここで注目すべきは、文字列2が渡された場合、返される結果は1になるということである。

b. json_keys は、json フィールドの最上位キー値を返します。

mysql> json_keys('{"name":"yeyz","score":100}') を選択します。
+------------------------------------------+
| json_keys('{"name":"yeyz","score":100}') |
+------------------------------------------+
| ["名前", "スコア"] |
+------------------------------------------+
セット内の1行(0.01秒)
mysql> json_keys('{"name":"yeyz","score":{"math":100,"English":95}}') を選択します。
+----------------------------------------------------------------+
| json_keys('{"name":"yeyz","score":{"math":100,"English":95}}') |
+----------------------------------------------------------------+
| ["名前", "スコア"] |
+----------------------------------------------------------------+
セット内の 1 行 (0.00 秒)
# 複数のレイヤーがある場合は、最後に $ メソッドを使用して、いずれかのレイヤーのディレクトリを取得できます。mysql> select json_keys('{"name":"yeyz","score":{"math":100,"English":95}}','$.score');
+--------------------------------------------------------------------------+
| json_keys('{"name":"yeyz","score":{"math":100,"English":95}}','$.score') |
+--------------------------------------------------------------------------+
| ["数学", "英語"] |
+--------------------------------------------------------------------------+
セット内の 1 行 (0.00 秒)

c. json_length 関数は最上位レイヤーのキーの数を返します。中間の特定のレイヤーを取得する場合は、次のように $ メソッドを使用できます。

mysql> json_length('{"name":"yeyz","score":{"math":100,"English":95},"age":26}'); を選択します。
+---------------------------------------------------------------------------+
| json_length('{"name":"yeyz","score":{"math":100,"English":95},"age":26}') |
+---------------------------------------------------------------------------+
| 3 |
+---------------------------------------------------------------------------+
セット内の 1 行 (0.00 秒)

mysql> json_length('{"name":"yeyz","score":{"math":100,"English":95},"age":26}','$.score') を選択します。
+------------------------------------------------------------------------------------------------------+
| json_length('{"name":"yeyz","score":{"math":100,"English":95},"age":26}','$.score') |
+------------------------------------------------------------------------------------------------------+
| 2 |
+------------------------------------------------------------------------------------------------------+
セット内の 1 行 (0.00 秒)

d. json_depth 関数、json ファイルの深さ、テスト例は次のとおりです。

mysql> json_depth('{"aaa":1}'),json_depth('{}'); を選択します。
+-------------------------+------------------+
| json_depth('{"aaa":1}') | json_depth('{}') |
+-------------------------+------------------+
| 2 | 1 |
+-------------------------+------------------+
セット内の 1 行 (0.00 秒)

mysql> json_depth('{"name":"yeyz","score":{"math":100,"English":95},"age":26}'); を選択します。
+--------------------------------------------------------------------------+
| json_depth('{"name":"yeyz","score":{"math":100,"English":95},"age":26}') |
+--------------------------------------------------------------------------+
| 3 |
+--------------------------------------------------------------------------+
セット内の 1 行 (0.00 秒)

ここで注意すべきは、{'aa':1}形式のJSONの深さは2である。

e. json_contains_path 関数は、json に 1 つ以上のメンバーがあるかどうかを取得します。

mysql> @j='{"a":1,"b":2,"c":{"d":4}}' を設定します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)
#oneは、メンバーが1つ含まれている限り、1を返すことを意味します。
mysql> json_contains_path(@j,'one','$.a','$.e') を選択します。
+------------------------------------------+
| json_contains_path(@j,'one','$.a','$.e') |
+------------------------------------------+
| 1 |
+------------------------------------------+
セット内の 1 行 (0.00 秒)
#all はすべてのメンバーが含まれることを意味し、その場合にのみ 1 が返されます。
mysql> json_contains_path(@j,'all','$.a','$.e') を選択します。
+------------------------------------------+
| json_contains_path(@j,'all','$.a','$.e') |
+------------------------------------------+
| 0 |
+------------------------------------------+
セット内の1行(0.01秒)

mysql> json_contains_path(@j,'one','$.c.d') を選択します。
+--------------------------------------+
| json_contains_path(@j,'one','$.c.d') |
+--------------------------------------+
| 1 |
+--------------------------------------+
セット内の 1 行 (0.00 秒)

mysql> json_contains_path(@j,'one','$.a.d') を選択します。
+--------------------------------------+
| json_contains_path(@j,'one','$.a.d') |
+--------------------------------------+
| 0 |
+--------------------------------------+
セット内の 1 行 (0.00 秒)

f. json_type 関数は json 内のメンバーのタイプを決定し、json_extract と組み合わせて使用​​する必要があります。

mysql> test1 から * を選択します。
+------+---------------------------------+
| ID | 情報 |
+------+---------------------------------+
| 1 | {"年齢": 26, "名前": "yeyz"} |
| 2 | {"年齢": 30, "名前": "zhangsan"} |
| 3 | {"年齢": 35, "名前": "lisi"} |
+------+---------------------------------+
セット内の 3 行 (0.00 秒)
#名前のタイプを判断しますmysql> select json_type(json_extract(info,"$.name")) from test1;
+----------------------------------------+
| json_type(json_extract(info,"$.name")) |
+----------------------------------------+
| 文字列 |
| 文字列 |
| 文字列 |
+----------------------------------------+
セット内の 3 行 (0.00 秒)
# 年齢のタイプを決定しますmysql> select json_type(json_extract(info,"$.age")) from test1;
+---------------------------------------+
| json_type(json_extract(info,"$.age")) |
+---------------------------------------+
| 整数 |
| 整数 |
| 整数 |
+---------------------------------------+
セット内の 3 行 (0.00 秒)
#名前と年齢の組み合わせの型を判断すると、配列であることがわかります
mysql> test1 から json_type(json_extract(info,"$.name","$.age")) を選択します。
+------------------------------------------------+
| json_type(json_extract(info,"$.name","$.age")) |
+------------------------------------------------+
| 配列 |
| 配列 |
| 配列 |
+------------------------------------------------+
セット内の 3 行 (0.00 秒)

g. * の役割、すべての値については、以下の例を参照してください。

{
 "a":1,
 "b":2,
 「ハ」:
   {
    "d":4
   }
 「e」:
   {
   「d」:
     {
     「ddd」:
     「5」
     }
   }
}
mysql> @j='{"a":1,"b":2,"c":{"d":4},"e":{"d":{"ddd":"5"}}}' を設定します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)
#すべてのメンバーmysql> select json_extract(@j,'$.*');
+---------------------------------------+
| json_extract(@j,'$.*') |
+---------------------------------------+
| [1, 2, {"d": 4}, {"d": {"ddd": "5"}}] |
+---------------------------------------+
セット内の 1 行 (0.00 秒)
すべてのメンバーのうち #d メンバーmysql> select json_extract(@j,'$.*.d');
+--------------------------+
| json_extract(@j,'$.*.d') |
+--------------------------+
| [4, {"ddd": "5"}] |
+--------------------------+
セット内の 1 行 (0.00 秒)

以上がMySQLにおけるJSONフィールドの操作方法の詳しい内容です。MySQL JSONフィールドの詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQL並列レプリケーションの簡単な説明
  • MySQL で削除されたレコードが有効にならない理由のトラブルシューティング
  • MySQL CHARとVARCHARの保存と読み取りの違い
  • MySQL 学習チュートリアル クラスター化インデックス
  • MySQLの大規模テーブル最適化ソリューションについての簡単な説明
  • MySQL 8.0 の降順インデックス
  • MySQLのストレージエンジンの詳細な説明
  • MySQL 最適化のケーススタディ
  • MySQL マスタースレーブレプリケーションでエラーをスキップする方法
  • MySQL 並列レプリケーションの簡単な分析

<<:  Vue3は独自のページングコンポーネントをカプセル化します

>>:  springcloud alibaba nacos linux 設定の詳細なチュートリアル

推薦する

XHTML 入門チュートリアル: XHTML タグ

XHTML タグの紹介<br />おそらく、前のセクションで、XHTML ファイルと通常...

Vue Element フロントエンドアプリケーション開発 従来の Element インターフェースコンポーネント

目次1. リストインターフェースとその他のモジュールの表示処理2. 従来のインターフェースコンポーネ...

抽選効果を実現するJavaScript

この記事では、宝くじマシンの効果を実現するためのJavaScriptの具体的なコードを参考までに共有...

フレックスレイアウトのスペース間の最後の行の左揃えの問題を解決する方法

まずはコードと効果を見てみましょう↓ <スタイル> 。主要 { アウトライン: 1px ...

条件付きコメント形式の書き方とサンプルコード

フロントエンドエンジニアとして、IE は私たちにとって馴染み深いものであるはずです。設計案を実装する...

ES6 における Object.assign() の使い方の詳細な説明

目次2. 目的2.1 オブジェクトにプロパティを追加する2.3 オブジェクトの複製2.4 複数のオブ...

node_modulesを削除して再インストールする方法

目次ステップ1: プロジェクトをインストールするディレクトリにnode_modulesをインストール...

さまざまなReact状態マネージャーの解釈と使用方法

まず、状態マネージャーとは何か、そしてそれが何をするのかを知る必要があります。複数のページで同じプロ...

Centos7 システムに k8s クラスターを展開するための詳細な紹介

目次1 バージョンと計画1.1 バージョン情報: 1.2 クラスター計画2. 展開1. ファイアウォ...

CSS3 フレックスボックス自動記入の書き方を詳しく解説

この記事では、主に CSS3 フレックス エラスティック ボックスの自動塗りつぶしの書き方について詳...

MySQLのデフォルトのソートルールに基づく落とし穴

MySQL のデフォルトの varchar 型は大文字と小文字を区別しません (insensitiv...

JavaScriptにおけるPromiseの使い方と注意点について(推奨)

1. 約束の説明Promise は、非同期操作の最終状態 (失敗または正常完了) とその結果の値を...

Linux システムにおける時間設定の概要

1. 時間の種類は次のように分けられます。 1. ネットワーク時間(タイムゾーンの設定、ntpサーバ...

MySQLで重複データを削除する詳細な例

MySQLで重複データを削除する詳細な例重複レコードには 2 つの意味があります。1 つは完全に重複...

Navicat PremiumはMySQLデータベースを操作します(SQL文を実行します)

1. Navicatの紹介1. Navicat とは何ですか? Navicat は強力な MySQ...