Mysql5.7 で JSON 操作関数を使用する手順

Mysql5.7 で JSON 操作関数を使用する手順

序文

JSON は、言語に依存しないテキスト形式を使用する軽量のデータ交換形式で、XML に似ていますが、XML よりもシンプルで、読み書きが簡単です。マシンによる解析と生成が容易になり、ネットワーク帯域幅の伝送が削減されます。

JSON の形式は非常にシンプルです: 名前/キー値。以前の MySQL バージョンでは、このようなストレージを実装するために、VARCHAR または TEXT のラージ テキストが使用されていました。 MySQL 5.7 のリリース以降、JSON データ型と、この型の取得およびその他の関数解析が特別に設計されました。

実践してみましょう。

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

たとえば、「記事」テーブルには次のようなフィールドがあります。

ID、タイトル、タグ

記事には複数のタグを付けることができ、タグはJSON型に設定できます。

テーブル作成ステートメントは次のとおりです。

CREATE TABLE記事`(
 id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
タイトル`varchar (200) NOT NULL,
 tags` json デフォルト NULL 、
主キー (`id`)
)ENGINE=InnoDB;

データの挿入

JSON コンテンツを含むデータを挿入するには、挿入ステートメントを実行します。

記事に挿入します (`title`, `tags`)
値 (
「Mysql JSONを体験する」
'["Mysql", "データベース"]'
);

ここで挿入されるのはJOSN配列["Mysql", "Database"]です

article テーブル内のすべてのコンテンツをクエリすると、新しく挿入されたデータを確認できます。

クエリ

JSON関数を使用して2つの簡単なクエリを実行する

1. タグ「MySQL」が付いたすべての記事を検索します

記事から*を選択`
WHERE JSON_CONTAINS(タグ、'["Mysql"]');

2. 「データ」で始まるタグが付いた記事を検索する

記事から*を選択`
JSON_SEARCH(tags, 'one', 'Data%') が NULL ではない場合;

JSON_SEARCH 関数の 3 つのパラメータの意味:

1. 発見すべき文書

2. 検索範囲には 2 つのオプションがあります。条件を満たす最初のものを検索する「1 つ」と、条件を満たすものをすべて検索する「すべて」です。

3. 検索条件

JSONパス

JSONパスは、ドキュメント内のターゲットフィールドを見つけるために使用されます。例:

JSON_EXTRACTを選択します(
'{"id": 1, "name": "mysql"}' 、
'$.名前'
);

結果は次のようになります:mysql

JSON_EXTRACT() は JSON 抽出関数です。$.name は JSON パスであり、見つかったドキュメントの名前フィールドを意味します。

JSON パスは $ で始まります。さらにいくつか例を見てみましょう。

{
「数字」: 123,
「arr」: [1, 2],
オブジェクト: {
「あ」: 3,
「バ」: 4
}
}
$.num //結果: 123
$.arr //結果: [1, 2]
$.arr[1] //結果: 1
$.obj.a //結果: 3
$**.b //結果: 4

JSON パスを使用したクエリの例

選択
tags-> "$[0]" を 'tag' として
記事より`;

データの更新

たとえば、記事に「dev」タグを追加する場合、更新条件は、すでに「MySQL」タグが含まれていて、「dev」タグの付いたデータがまだ存在しないことです。

更新ステートメントは次のとおりです。

記事を更新
SET tags = JSON_MERGE(tags, '["dev"]')
どこ
JSON_SEARCH(タグ、'one'、'dev') は NULL です
そして
JSON_SEARCH(tags, 'one', 'Mysql') は NULL ではありません。

「dev」タグが正常に追加されたことがわかります

たとえば、「Mysql」タグを「Mysql 5.7.13」に更新する場合、更新ステートメントは次のようになります。

UPDATE article` set tags = JSON_SET(tags, '$[0] ', 'Mysql 5.7.13' ) ;

上記では JSON_MERGE と JSON_SET について説明しました。JSON を変更するための関数は他にもたくさんあります。

JSON_INSERT(doc, path, val[, path, val]…)

データの挿入

JSON_REPLACE(doc, path, val[, path, val]…)

データを置き換える

JSON_ARRAY_APPEND(doc, path, val[, path, val]…)

配列の末尾にデータを追加する

JSON_REMOVE(doc, path[, path]…)

指定された場所からデータを削除する

初期操作経験を通して、Mysql の JSON 操作は比較的スムーズだと感じました。今後 MySQL でドキュメント構造を使用するのは本当に便利です。

以下もご興味があるかもしれません:
  • MySQL 5.7 における基本的な JSON 操作ガイド
  • MySQL 5.7 JSON 型の使用の詳細
  • MySQL 5.7 JSON形式の取得に関する簡単な説明
  • mysql5.6 以前のデータベースで json をクエリする方法
  • MySQLにおけるJSON系列操作関数の詳しい説明
  • MySQL 操作: JSON データ型の操作
  • MySQL の JSON 挿入の問題
  • MySQL (5.6 以下) の JSON 解析の詳細な例
  • mysql5.7 の新しい json フィールド タイプの使用例の分析

<<:  vue3.0共通コンポーネントの自動インポート方法の例

>>:  CentOSバージョンにDockerをインストールする際のエラーの解決方法

推薦する

proxy_pass を設定した後に Nginx が 404 を返す問題を解決する

目次1. proxy_pass を設定した後に Nginx が 404 を返す問題のトラブルシューテ...

HTML フォームを送信するいくつかの方法_PowerNode Java Academy

方法1: 送信ボタンから送信する <!DOCTYPE html> <html>...

スケルトンスクリーン効果を実現する CSS

ネットワーク データを読み込むときは、ユーザー エクスペリエンスを向上させるために、通常は円形の読み...

リンクされた画像をダウンロードしてアップロードするJavaScriptの実装

写真をアップロードするので、まずはダウンロード可能な画像リソースかどうかを判断する必要があります。正...

nginx を使用したプロキシ サーバーの設定

Nginx は、リバース プロキシ機能を使用して負荷分散を実装できるほか、フォワード プロキシ機能を...

CSS で 2 列レイアウトを実現する N 通りの方法

1. 2 列レイアウトとは何ですか? 2 列レイアウトには、左側が固定幅で右側が適応幅のレイアウトと...

Vue Element-ui はツリーコントロールノードを実装し、アイコンを追加します。詳細な説明

目次1. レンダリング2. データをバインドし、ツリーテーブルにラベルを追加する3. すべてのコード...

Windows 10 に Apache 2.4.41 をインストールするチュートリアル

1. Apache 2.4.41 のインストールと設定最初のステップは、以下に示すように、https...

MySQL ストアド プロシージャで月ごとにテーブルを作成する方法

詳細には立ち入らずに、コードに直接進みましょう。一緒にコミュニケーションを取り、学びましょう。月ごと...

HTML テーブルの境界線を設定する際のヒント

HTML を初めて使用する多くの人にとって、テーブル <table> は最もよく使用され...

Vueのvue-tree-colorコンポーネントの組織構造図の事例を詳しく解説

目次ネプローダーをインストールするプラグインのインポート始める配置折りたたみディスプレイノードをクリ...

MySQLのkillがスレッドをkillできない理由

目次背景問題の説明原因分析シミュレーションする総括する背景日常の使用において、MySQL で個別また...

MySql 範囲内の検索時にインデックスが有効にならない理由の分析

1 問題の説明この記事では、確立された複合インデックスをソートし、レコード内の非インデックス フィー...

Ubuntu サーバーで MySQL を設定し、リモート接続を実装する方法

サーバー: Ubuntu Server 16.04 LSSクライアント: Ubuntu 16.04 ...

リクエストを転送したり、静的リソースファイルにアクセスしたりする複数の場所への nginx の実装

この記事では主に、リクエストを転送したり、静的リソース ファイルにアクセスしたりする nginx の...