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 (落とし穴)

推薦する

Vue でコンポーネントを一括インポート、登録、使用する方法

序文コンポーネントは、非常に頻繁に使用されるものです。多くの人は、コンポーネントを 1 つのファイル...

Linux クラウド サーバーに JDK と Tomcat をインストールするための詳細な手順 (推奨)

JDKをダウンロードしてインストールするステップ 1: まず、公式 Web サイト http://...

Ubuntu 16.04 サーバーで MySQL を設定し、リモート接続を有効にする方法

背景最近、Node.js を勉強しているのですが、クラウド サーバーがあることを思い出しました。しか...

CocosCreator最適化DrawCallの詳細な説明

目次序文ドローコールとはDrawCall はパフォーマンスにどのような影響を与えますか?ドローコール...

シェルスクリプトは、Docker の半自動コンパイル、パッケージ化、およびリリースアプリケーション操作を構築します。

Docker 公開方法は、DevOps (送信、コンパイル、パッケージ化、リリースなどの一連のイベ...

MySQL インデックスの左端原則のサンプルコード

序文最近、MySQL のインデックスについて読んでいました。結合されたインデックスを見ると、左端の原...

MySQLの連結関数CONCATの使い方の詳しい説明

前回の記事では、MySQL の置換関数 (Replace) とセグメンテーション関数 (SubStr...

DockerでPrometheusをインストールする詳細なチュートリアル

目次1. Node Exporterをインストールする2. cAdvisorをインストールする3. ...

Centos7 システム上の nginx サーバーで Phalcon 環境を構築する方法の詳細な説明

この記事では、centos7 システムの nginx サーバーの下に phalcon 環境を構築する...

MySQL5.7.03 上位バージョンから MySQL 5.7.17 への置き換えインストール プロセスと見つかった問題の解決策

1. インストール方法は? 1. [実行] -> [cmd] と入力して、小さな黒いウィンドウ...

Nodeはkoa2を使用してシンプルなJWT認証方式を実装します

JWT の紹介JWTとは正式名称はJSON Web Tokenで、現在最も人気のあるクロスドメイン認...

要素フォーム検証で検証プロンプトをクリアする方法

目次問題のシナリオ:解決: 1. フィールドを個別にチェックする2. フォームフィールドの下のフィー...

Dockerを使用してSpring Bootプロジェクトをデプロイする手順

目次シンプルなSpringbootプロジェクトを作成する1. pom.xmlでSpring Boot...

動的なデジタル時計を実装するJavaScript

この記事では、JavaScriptで動的なデジタル時計を実装するための具体的なコードを参考までに紹介...

js データ型とその判定方法の例

js データ型基本データ型: 数値、文字列、ブール値、未定義、null、シンボル、参照データ型: オ...