mysql5.7 の新しい json フィールド タイプの使用例の分析

mysql5.7 の新しい json フィールド タイプの使用例の分析

この記事では、MySQL 5.7 で追加された json フィールド タイプの使用方法を例を使って説明します。ご参考までに、詳細は以下の通りです。

1. テーブルを作成し、データを準備しましょう

テーブル `json_test` を作成します (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
 `json` json デフォルト NULL コメント 'json データ',
 主キー (`id`)
)ENGINE=InnoDB デフォルト文字セット=utf8mb4;

2. json列のフィールドを取得する

-> または ->> 演算子を使用して、JSON 列のフィールドを取得します。

json_testからid、json->'$[0].items[0].name'を選択します。

json_testからid、json->>'$[0].items[0].name'を選択します。

-> と ->> の違いは、結果が引用符で囲まれることです。

3. JSONを処理するためのいくつかの関数

JSON_PRETTY(json_val)はjson値をエレガントな形式で表示します

json_test\G から id、JSON_PRETTY(json) を選択します。

JSON_CONTAINS(target, candidate[, path]) 指定された候補がターゲットに含まれているかどうかを判断します。パスが指定されている場合は、指定されたパスで検索します。

候補が数値の場合は、一重引用符で囲む必要があることに注意してください。文字列の場合は、一重引用符の内側に二重引用符で囲む必要があります。

json_testからJSON_CONTAINS(json->'$[0].name', '"1号basket"')を選択します。
json_testからJSON_CONTAINS(json, '"1号篮"', '$[0].name')を選択します。

JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...) は、json_doc 内のパスが存在するかどうか、または平易に言えば、json 内のキーが存在するかどうかを判断します。

json_testからJSON_CONTAINS_PATH(json, 'one', '$[0].name', '$[0].test')を選択します。

2番目のパラメータ「1」は、キーがある場合は1を返し、ない場合は0を返すことを意味します。

json_testからJSON_CONTAINS_PATH(json, 'all', '$[0].name', '$[0].test')を選択します。

2番目のパラメータ「all」は、すべてのキーが存在する場合にのみ1が返され、それ以外の場合は0が返されることを意味します。

JSON_SET(json_doc, path, val[, path, val] ...)はデータを挿入または更新し、結果を返します。

json_testからJSON_SET(json, '$[0].name', 'バスケット番号2', '$[0].test', 'test')を選択します。

$[0].nameの値を変更し、キーtestと値testを持つ項目を追加します。

JSON_INSERT(json_doc, path, val[, path, val] ...) データを挿入して結果を返しますが、既存の値は置き換えません。

json_testからJSON_INSERT(json, '$[0].name', 'バスケット番号2', '$[0].exts', '拡張子')を選択します。

この時点では、$[0].nameは更新されず、新しいフィールド$[0].extsのみが追加されます。

JSON_REPLACE(json_doc, path, val[, path, val] ...) 既存の値を置き換え、結果を返します。

json_testからJSON_REPLACE(json, '$[0].name', 'Replace')を選択します。

$[0].nameの値を新しい値に置き換えます

JSON_REMOVE(json_doc, path[, path] ...) データを削除し、結果を返します

json_testからJSON_REMOVE(json, '$[0].name')を選択します。

データ$[0].nameを削除します

JSON_KEYS(json_doc[, path]) jsonドキュメント内のすべてのキーを取得します

json_testからJSON_KEYS(json, '$[0]')を選択します。

$[0]パスの下にあるすべてのキーを取得します

JSON_LENGTH(json_doc[, path]) jsonドキュメントの長さを取得します

json_testからJSON_LENGTH(json, '$[0]')を選択します。

$[0]以下の要素の数を取得します。

JSON_EXTRACT(json_doc, path[, path] ...) jsonドキュメント内のデータを返します

json_testからJSON_EXTRACT(json, '$[0]')を選択します。
json_testからJSON_EXTRACT(json, '$[0].name')を選択します。

jsonドキュメントの指定されたパスにあるデータを返します

JSON_ARRAY([val[, val] ...])はJSON配列を作成する

JSON_ARRAY(1, '2', true, 5.6, null, now()) を選択します。

JSON_OBJECT([key, val[, key, val] ...]) キーと値のペアからJSONオブジェクトを作成する

JSON_OBJECT('name', 'xiaoxu', 'age', 28, 'height', 1.72)を選択します。

キーと値はペアで表示する必要があることに注意してください。

JSON_MERGE_PATCH(json_doc, json_doc[, json_doc] ...) は、json ドキュメントをマージします。重複するキーがある場合、後者のデータが前のデータを上書きします。

JSON_MERGE_PATCH('{"name":"test1"}', '{"name":"test2"}') を選択します。

JSON_MERGE_PRESERVE(json_doc, json_doc[, json_doc] ...) は、json ドキュメントをマージします。重複するキーがある場合、値は配列に保存されます。

JSON_MERGE_PRESERVE('{"name":"test1"}', '{"name":"test2"}') を選択します。

JSON_QUOTE(文字列)は、内部引用符やその他の文字を二重引用符で囲んでエスケープします。

JSON_QUOTE('Hello "World"') を選択します。

JSON_UNQUOTE(json_val) エスケープ文字を通常の文字に戻す

JSON_UNQUOTE('Hello\\t\"world\"') を選択します。

MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL クエリ スキル」、「MySQL 共通関数の概要」、「MySQL ログ操作スキル」、「MySQL トランザクション操作スキルの概要」、「MySQL ストアド プロシージャ スキル」、および「MySQL データベース ロック関連スキルの概要」

この記事が皆様のMySQLデータベース設計に役立つことを願っています。

以下もご興味があるかもしれません:
  • MySQL クエリ フィールド タイプが json の場合の 2 つのクエリ メソッド
  • MySQL フルテキスト インデックス、ジョイント インデックス、Like クエリ、JSON クエリのうち、どれが高速ですか?
  • Pythonは複数行のJSONデータをMySQLに転送する実装を実装します
  • Python3は、kafkaからデータを取得し、それをjson形式に解析し、mysqlに書き込むことを実装しています。
  • MySQL に JSON のようなデータを保存する Python の例
  • Python を使用して MySQL データベースのデータを JSON データに変換する方法
  • PHPはMySQLデータベースに接続し、json形式で出力します。
  • MySQLでJSONフィールドを操作する方法

<<:  知らないかもしれない実用的なTypeScriptのヒント

>>:  Ubuntu Linuxシステムをインストールするときにハードディスクをパーティション分割する最も合理的な方法の詳細な説明

推薦する

ブラウザのCSS、JavaScript、背景画像のキャッシュをクリアする簡単な方法

実際のプロジェクト開発プロセスでは、ページがサーバーにアップロードされます。サーバーへの負荷を軽減し...

js の toString メソッドの 3 つの機能

目次1. toStringメソッドの3つの機能2. オブジェクトを表す文字列を返す3. カスタム t...

CSSは親要素の下の最初の子要素を選択します(:first-child)

序文最近、プロジェクトで :first-child を使用したのですが、すぐに思いつきました。これは...

枠線や境界線のない iframe を使用するための完全ガイド (実践経験のまとめ)

<iframe src=”ページのURL” width=”100″ height=”30″ f...

メモリの原則に関する詳細な説明: JS では変数はヒープに保存されるのか、スタックに保存されるのか?

目次1. 冷蔵庫に入りきらない象2. シャドウクローン文字列3. 実際に見た「奇妙なボール」 4. ...

Linux で開いているファイルが多すぎる問題を解決する方法

原因は、プロセスが特定の時点でシステム制限を超える数のファイルと通信リンクを開くことです。 システム...

React の調整アルゴリズム Diffing アルゴリズム戦略の詳細な説明

目次アルゴリズム戦略単一ノードの差分配列ノードの差分キー値の使用要件アルゴリズム戦略React の調...

PID を作成できないために MySQL が起動できない問題を解決する方法

問題の説明MySQL 起動エラー メッセージは次のとおりです。 mysqld を起動します (sys...

MySQLデータベース監視binlogを有効にする手順

序文多くの場合、ユーザーが自分のデータに対して実行する操作に基づいて何かを行う必要があります。たとえ...

LambdaProbe を使用して Tomcat を監視する方法

導入: Lambda Probe (旧称 Tomcat Probe) は、Apache Tomcat...

Reactフックとzarmコンポーネントライブラリ構成に基づいてh5フォームページを開発するためのサンプルコード

最近、React Hooks を zarm コンポーネント ライブラリと組み合わせて使用​​し、js...

nginx でネストされた if メソッドを実装する方法

Nginx はネストされた if ステートメントをサポートしておらず、if ステートメントでの論理判...

MySQL共通インデックスとユニークインデックスの詳細な説明

シナリオ1. ID番号のフィールドを備えた市民システムを維持する2. ビジネス コードでは、重複する...

Linux ファイアウォールの状態確認方法の例

Linuxファイアウォールの状態を確認する方法1. 基本操作 # ファイアウォールのステータスを表示...

MySQLのorder byとlimitを混在させる際の落とし穴の詳細な説明

MySQL では、ソートには order by を、ページングには limit をよく使用します。最...