MySQL 8.0はJSONを扱えるようになりました

MySQL 8.0はJSONを扱えるようになりました

序文:

長いテストを経て、システム全体がMysql8.0に移行されます。MySQL Mysql8.0Json操作に関連する多くのJson API 操作が追加/最適化されています。公式ドキュメントを読みました。ほとんどの JSON 操作はアプリケーション層で完了しますが、一部のMysql JSON構文はdebugやすいです。今後の参考のために、基本的で価値のある部分を選択しました。

https://dev.mysql.com/doc/ref...
https://dev.mysql.com/doc/ref...

1. 概要

nullは許可されません。Json Jsonの定義はLONGBLOB or LONGTEXTに似ています。最大長はmax_allowed_packetによって制御されます。
JSON フィールドが占有するスペースを表示する関数は、JS ON_STORAGE_SIZE(xxx)です。
一般的なJson操作に加えて、 GeoJSONかサポートしています。
Json 列のインデックス作成をサポートします ( Mysql8.0新機能である関数indexと組み合わせて使用​​します)。
Json Columnの部分的なインプレース更新をサポートするオプションの最適化がMySql8.0に追加されました。使用できる関数はJSON_SET()JSON_REPLACE()JSON_REMOVE()です。使用時にはいくつかの制限がありますが、パフォーマンスは向上します。

2. JSON基本ツール

//JSON_ARRAY メソッドを使用して JSON 配列を定義します。
JSON_ARRAY(1, "abc", NULL, TRUE, CURTIME()) を選択します
//結果: [1, "abc", null, true, "11:30:24.000000"]  

//JSON_OBJECT メソッドは JSON オブジェクトを定義します SELECT JSON_OBJECT('id', 87, 'name', 'carrot')
//結果 {"id": 87, "name": "carrot"}

//配列とオブジェクトのネスト シナリオ。
[99, {"id": "HK500", "cost": 75.99}, ["hot", "cold"]] {"k1": "value", "k2": [10, 20]}

//日付/時刻型の定義 ["12:18:29.000000", "2015-07-29", "2015-07-29 12:18:29.000000"]

 //JSON_QUOTE は JSON オブジェクトを文字列にエスケープします。つまり、内部シンボルをエスケープし、オブジェクト全体を二重引用符で囲みます。
JSON_QUOTE(' "null" ')
// 結果 "\"null\""

//JSON コンテンツを整形して出力します。
JSON_PRETTY()

//JSON または JSON 内の要素を他のデータ型に変換できます。
//JSON jdoc 内の id 要素を次のように unsigned int に変換します。
[https://dev.mysql.com/doc/refman/8.0/en/json.html#json-converting-between-types] (https://dev.mysql.com/doc/refman/8.0/en/json.html#json-converting-between-types)
ORDER BY CAST(JSON_EXTRACT(jdoc, '$.id') AS UNSIGNED);

JSONマージ操作JSON_MERGE_PRESERVE() and JSON_MERGE_PATCH()実際のビジネスではほとんど使用されません。

-> --> 演算子は、キーに従って値を検索します。違いは、 --> は " とエスケープ文字を削除することです。同等のFunction形式はJSON_EXTRACT()です。

// {"mascot": "私たちのマスコットは「サキラ」という名前のイルカです。"}
mysql> col->"$.mascot" を qtest から選択します。
// 結果: | 「私たちのマスコットは「サキラ」という名前のイルカです。」 |
SELECT sentence->>"$.mascot" FROM facts;
// 結果: | 私たちのマスコットは「Sakila」という名前のイルカです。 |

3. JSONパス式

上記の二重引用符 ( --> ) 内の内容は、いわゆるJSON Path expressionです。
この構文はECMAScript仕様の一部であるため、フロントエンド プログラマーは特にこれに精通している必要があります。

次の JSON を例に挙げます。

 [3、{"a": [5、6]、"b": 10}、[99、100]]
 $[0] = 3 ;
 $[1] = {"a": [5, 6], "b": 10};
 $[2] = [99, 100];


同時に、$[1]、$[2]はスカラーではなく、さらに

$[1].a = [5,6]
$[1].a[1] = 6
$[1].b = 10;
$[2][0] = 99;


さらにサポートされている構文機能 $[n から m]

 $[ 1 から 2] = [{"a": [5, 6], "b": 10}, [99, 100]]
 $[last-2 から last-1] = [3, {"a": [5, 6], "b": 10}]


要約すると;

  • .* はmembers in objectを表します。
  • b [*]はcells in arrayを表します。
  • c [プレフィックス] ** サフィックスはプレフィックスで始まりサフィックスで終わるすべてのパスを表します。

4. JSONを検索して変更する

// 上記のように、代わりに --> 構文を使用することもできます。
mysql> JSON_EXTRACTを選択します('{"a": 1, "b": 2, "c": [3, 4, 5]}', '$.*');
//[1, 2, [3, 4, 5]]  
JSON_EXTRACT('{"a": 1, "b": 2, "c": [3, 4, 5]}', '$.c[*]')を選択します
//[3, 4, 5]
JSON_EXTRACT('{"a": {"b": 1}, "c": {"b": 2}}', '$**.b')を選択します。
//[1, 2]
JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[1から3]')を選択します。
//[2, 3, 4]

//JSON_SET JSON_INSERT JSON_REPLACE JSON_REMOVE
SET @j = '["a", {"b": [true, false]}, [10, 20]]';
JSON_SET(@j, '$[1].b[0]', 1, '$[2][2]', 2)を選択します。
//| ["a", {"b": [1, false]}, [10, 20, 2]]    

JSON_INSERT(@j, '$[1].b[0]', 1, '$[2][2]', 2)を選択します。
//["a", {"b": [真、偽]}, [10, 20, 2]]

JSON_REPLACE(@j, '$[1].b[0]', 1, '$[2][2]', 2)
//["a", {"b": [1, 偽]}, [10, 20]]

JSON_REMOVE(@j, '$[2]', '$[1].b[1]', '$[1].b[1]')を選択します。
//["a", {"b": [true]}]

JSON Table Functions一般的なシナリオは、 JSONデータ自体がテーブル構造であることです。

JSON_TABLE(*expr*, *path* COLUMNS (*column_list*) [AS\] *alias*)

JSON_TABLE から * を選択( '[{"a":"3"},{"a":2},{"b":1},{"a":0},{"a":[1,2]}]',
  -> "$[*]"
  -> 列(
  -> rowid 順序性、
  -> ac VARCHAR(100) PATH "$.a" 空の場合はデフォルト '111' エラーの場合はデフォルト '999'
  -> aj JSON PATH "$.a" デフォルト '{"x": 333}' が空の場合、
  -> bx INT パス "$.b" が存在する
  -> )
  -> ) AS tt;

Comparison and Ordering of JSON Values

現時点では価値があるとは思えません。

Aggregation of JSON Values

現時点では価値がないと思いますが、戻り値を別の型に変換することで集計関数を使用できます。

MySQL 8.0 で JSON を操作できることに関するこの記事はこれで終わりです。MySQL 8.0 で JSON を操作することに関するより関連のあるコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQL データベース ターミナル - 一般的な操作コマンド コード
  • MySQL データベースの集計クエリと結合クエリ操作
  • MySQLデータベースのデータテーブルに関する詳細な基本操作
  • MySQL データベースの操作とデータ型
  • MySQL 演算子の具体的な使用法 (and、or、in、not)
  • いくつかのMySQL更新操作のケース分析
  • MySQLの高度な操作手順の概要

<<:  Blazor における CSS 分離の問題

>>:  ElementUI コンポーネント el-dropdown (落とし穴)

推薦する

CSSの高さの崩壊問題についての簡単な説明

パフォーマンス例えば: HTML: <div class="first"&...

ログインと登録を実現するSpringboot+VUE

この記事の例では、ログインと登録を実装するためのspringboot+VUEの具体的なコードを参考ま...

Windows 環境での MYSQL5.7 設定ファイルの場所のグラフィカル分析

1. MYSQLインストールディレクトリ次のようにコードをコピーします。 select @@bas...

Centos8 (最小インストール) Python3.8+pip のインストール方法に関するチュートリアル

Python8のインストールを最小化した後、Python3.8.1をインストールしました。オンライン...

JavaScript でカルーセル効果を実装する

この記事では、カルーセルの効果を実現するためのJavaScriptの具体的なコードを参考までに共有し...

高品質なウェブページのデザイン方法 高品質なウェブページ(画像とテキスト)のデザイン経験

オープンプラットフォームの増加に伴い、そこから派生するさまざまなアプリケーションサービスも増加傾向に...

MySQL8の再帰メソッドの使い方を教える

以前、カスタム関数を使用して MySQL でツリー構造を再帰的にクエリする方法についての記事を書きま...

Django は Pillow を使用して検証コード機能を簡単に設定します (Python)

1. モジュールをインポートし、検証状態を定義する PIL から Image、ImageDraw、...

プロジェクトを素早く構築するためのvite+vue3.0+ts+element-plusの実装

目次バイト機能使用環境プロジェクトを構築する構成vite.config.ts tsconfig.js...

nginx のスムーズな再起動を実装する方法

1. 背景サーバーの開発プロセスでは、新しいコードや構成をロードするためにサービスを再起動することが...

Vue.js のミックスインの詳細な説明

ミックスインは、コンポーネントに分散された再利用可能な機能を柔軟な方法で提供します。 Mixin オ...

Ubuntu16.04にCUDA9.0をインストールするための詳細なチュートリアル

序文:この記事は、CUDA 9.0 をインストールした経験に基づいています。CUDA 9.0 は現在...

MySQL はリレーショナルデータベースですか?

MySQL はリレーショナル データベース管理システムです。リレーショナル データベースは、すべて...

ウェブページデザインのための4つの実践的なヒント

関連記事: Web コンテンツ ページを作成するための 9 つの実用的なヒント<br />...

Vuexの補助関数の使い方

目次マップ状態マップゲッターマップミューテーションマップアクション複数のモジュールマップ状態 ...