MySQL 5.7 における基本的な JSON 操作ガイド

MySQL 5.7 における基本的な JSON 操作ガイド

序文

プロジェクトのニーズにより、ストレージ フィールドは JSON 形式で保存されます。プロジェクトでは、クエリされた値は Jackson を介して対応する Bean に変換されて処理されますが、これは十分にシンプルで便利ではありません。

MySQL はバージョン 5.7 以降で JSON 形式のデータをサポートしており、操作が非常に便利になっています。

テーブルを作成する

新しいテーブルを作成するときに、フィールド タイプを json タイプに直接設定できます。たとえば、テーブルを作成します。

mysql> テーブル `test_user`(`id` INT PRIMARY KEY AUTO_INCREMENT、`name` VARCHAR(50) NOT NULL、`info` JSON) を作成します。

JSON型フィールドはNULLにできる

データを挿入:

mysql> INSERT INTO test_user(`name`, `info`) VALUES('xiaoming','{"sex": 1, "age": 18, "nick_name": "小萌"}');

json 型のフィールドは有効な json 文字列である必要があります

JSON_OBJECT()関数を使用して json オブジェクトを構築できます。

mysql> test_user(`name`, `info`) に VALUES('xiaohua', JSON_OBJECT("sex", 0, "age", 17) を挿入します。

JSON_ARRAY()関数を使用して JSON 配列を構築します。

mysql> test_user(`name`, `info`) に INSERT INTO VALUES('xiaozhang', JSON_OBJECT("sex", 1, "age", 19, "tag", JSON_ARRAY(3,5,90)));

次に、test_user テーブルのデータを表示します。

mysql> test_user から * を選択します。 
+----+-----------+--------------------------------------------+ 
| ID | 名前 | 情報 |
+----+-----------+--------------------------------------------+ 
| 1 | xiaoming | {"age": 18, "sex": 1, "nick_name": "小萌"} | 
| 2 | xiaohua | {"年齢": 17, "性別": 0} |
| 3 | xiaozhang | {"年齢": 19, "性別": 1, "タグ": [3, 5, 90]} | 
+----+-----------+--------------------------------------------+
3 行セット (0.04 秒)

クエリ

式: オブジェクトは json 列 -> '$.key'、配列は json 列 -> '$.key[index]'

mysql> test_user から name、info->'$.nick_name'、info->'$.sex'、info->'$.tag[0]' を選択します。 
+-----------+---------------------+---------------+------------------+ 
| 名前 | 情報->'$.nick_name' | 情報->'$.sex' | 情報->'$.tag[0]' | 
+-----------+---------------------+---------------+------------------+ 
| xiaoming | 「シャオミン」 | 1 | NULL | 
| シャオホア | NULL | 0 | NULL | 
| xiaozhang | NULL | 1 | 3 | 
+-----------+---------------------+---------------+------------------+ 
3 行セット (0.04 秒)

同等: オブジェクトの場合はJSON_EXTRACT(json列, '$.鍵') JSON_EXTRACT(json列, '$.鍵[index]')

mysql> test_user から name、JSON_EXTRACT(info、'$.nick_name')、JSON_EXTRACT(info、'$.sex')、JSON_EXTRACT(info、'$.tag[0]') を選択します。
 +-----------+----------------------------------+-----------------------------+--------------------------------+ 
| 名前 | JSON_EXTRACT(情報、'$.ニックネーム') | JSON_EXTRACT(情報、'$.性別') | JSON_EXTRACT(情報、'$.タグ[0]') 
|+-----------+-----------------------------------+-----------------------------+--------------------------------+ 
| xiaoming | 「シャオミン」 | 1 | NULL |
| シャオホア | NULL | 0 | NULL | 
| xiaozhang | NULL | 1 | 3 | 
+-----------+----------------------------------+-----------------------------+--------------------------------+ 
3 行セット (0.04 秒)

ただし、「小萌」は二重引用符で囲まれていますが、これは望ましくありません。JSON_UNQUOTE 関数を使用して二重引用符を削除できます。

mysql> test_user から name、JSON_UNQUOTE(info->'$.nick_name') を選択します。name='xiaoming' です。 
+----------+-----------------------------------+ 
| 名前 | JSON_UNQUOTE(info->'$.nick_name') | 
+----------+-----------------------------------+ 
| シャオミン | シャオミン| 
+----------+-----------------------------------+ 
セット内の1行(0.05秒)

演算子->>を直接使用することもできます

mysql> name、info->>'$.nick_name' を test_user から選択します。name='xiaoming';
+----------+----------------------+ 
| 名前 | 情報->>'$.nick_name' | 
+----------+----------------------+ 
| シャオミン | シャオミン| 
+----------+----------------------+ 
セット内の1行(0.06秒)

もちろん、属性はクエリ条件としても使用できます。

mysql> test_user から name, info->>'$.nick_name' を選択します。ここで、info->'$.nick_name'='Xiao Meng'; 
+----------+----------------------+ 
| 名前 | 情報->>'$.nick_name' | 
+----------+----------------------+ 
| シャオミン | シャオミン| 
+----------+----------------------+ 
セット内の1行(0.05秒)

仮想列を使用すると、JSON 型の指定された属性をすばやくクエリできることは注目に値します。

仮想列を作成します。

mysql> ALTER TABLE `test_user` ADD `nick_name` VARCHAR(50) GENERATED ALWAYS AS (i​​nfo->>'$.nick_name') VIRTUAL;

演算子 ->> の使用に注意してください。

使用方法は通常の列クエリと同じです。

mysql> select name,nick_name from test_user where nick_name='小萌'; 
+----------+------------+ 
| 名前 | ニックネーム | 
+----------+------------+ 
| シャオミン | シャオミン| 
+----------+------------+ 
セット内の1行(0.05秒)

更新する

既存の値を上書きせずに新しい値を挿入するにはJSON_INSERT()を使用します

mysql> UPDATE test_user SET info = JSON_INSERT(info, '$.sex', 1, '$.nick_name', '小花') where id=2;

結果を見てください

mysql> id=2 の test_user から * を選択します。 
+----+---------+------------------------------------------+-----------+ 
| ID | 名前 | 情報 | ニックネーム | 
+----+---------+------------------------------------------+-----------+ 
| 2 | xiaohua | {"age": 17, "sex": 0, "nick_name": "小花"} | xiaohua| 
+----+---------+------------------------------------------+-----------+ 
セット内の1行(0.06秒)

JSON_SET()を使用して新しい値を挿入し、既存の値を上書きします

mysql> UPDATE test_user SET info = JSON_INSERT(info, '$.sex', 0, '$.nick_name', '小张') where id=3;

結果を見てください

mysql> test_user から * を選択します (id=3); 
+----+-----------+--------------------------------------------------------------------------+ 
| ID | 名前 | 情報 | ニックネーム | 
+----+-----------+--------------------------------------------------------------------------+ 
| 3 | xiaozhang | {"age": 19, "sex": 1, "tag": [3, 5, 90], "nick_name": "小张"} | xiaozhang| 
+----+-----------+--------------------------------------------------------------------------+ 
セット内の1行(0.06秒)

既存の値のみを置き換えるにはJSON_REPLACE()を使用します

mysql> UPDATE test_user SET info = JSON_REPLACE(info, '$.sex', 1, '$.tag', '[1,2,3]') ここで id=2;

結果を見てください

mysql> id=2 の test_user から * を選択します。 
+----+---------+------------------------------------------+-----------+ 
| ID | 名前 | 情報 | ニックネーム | 
+----+---------+------------------------------------------+-----------+ 
| 2 | xiaohua | {"age": 17, "sex": 1, "nick_name": "小花"} | xiaohua| 
+----+---------+------------------------------------------+-----------+ 
セット内の1行(0.06秒)

タグが更新されていないことがわかります。

消去

JSON_REMOVE()を使用して JSON 要素を削除する

mysql> UPDATE test_user SET info = JSON_REMOVE(info, '$.sex', '$.tag') where id=1;

結果を見てください

mysql> id=1 の test_user から * を選択します。 
+----+----------+----------------------------------+-----------+ 
| ID | 名前 | 情報 | ニックネーム | 
+----+----------+----------------------------------+-----------+ 
| 1 | xiaoming | {"age": 18, "nick_name": "Xiao Meng"} | Xiao Meng | 
+----+----------+----------------------------------+-----------+ 
セット内の1行(0.05秒)

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。

以下もご興味があるかもしれません:
  • MySQL 操作: JSON データ型の操作
  • MySQLにおけるJSON系列操作関数の詳しい説明
  • MysqlクエリJSON結果に関連する関数の概要
  • MySQL json 形式のデータクエリ操作

<<:  AngularパイプラインPIPEの紹介と使い方

>>:  Tomcatがセッションを管理する方法の例

推薦する

アニメーションとトランジションの違い

CSS3アニメーションとJSアニメーションの違いJSはフレームアニメーションを実装しますCSS3はト...

CSS でテキストカラーグラデーションを実装する 3 つの方法

Web フロントエンド開発のプロセスでは、UI デザイナーはグラデーション テキストを使用したデザイ...

EChartsマウスイベント処理方法の詳細な説明

イベントとは、クリック、マウスオーバー、ページの読み込み後にトリガーされる読み込みイベントなど、ユー...

Webpack5-react スキャフォールディングをゼロから構築するための実装手順 (ソースコード付き)

目次ウェブパック5公式スタート建築ガイド構築を開始する依存する準備が完了したら、プロジェクトの構築を...

CSS3の3D効果を使って立方体を作成する

CSS3 の 3D 効果を使用して立方体を作成する方法を学ぶと、3D シーンの回転と変位のプロパティ...

Centos7 での DNS サーバーの構築の概要

目次1. プロジェクト環境: 2: DNSサーバーの設定i: 前方解析を構成する: ii: 逆解像度...

MySql ストレージ エンジンとインデックスに関する知識のまとめ

ストレージエンジンデータベース ストレージ エンジンとは何ですか?データベース エンジンは、データベ...

Vue フロントエンド開発補助機能状態管理詳細例

目次マップ状態マップゲッターマップミューテーションマップアクション例まとめマップ状態コンポーネントが...

CSS 疑似クラス: 空っぽだと光る (サンプルコード)

最近私の記事を読んだ人なら誰でも、私が現在WeChatミニプログラムプロジェクトを担当しており、その...

VueプロジェクトにPWAを導入する手順

目次1. 依存関係をインストールする2. vue.config.js ファイルで pwa を設定しま...

マークアップ言語 - 画像の置き換え

123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...

XHTML+CSS Web ページ作成における美しいスタイルシートの適用

これはかなり前に書かれた記事です。今となっては、その中の考え方は学ぶ価値があるように思えます。jb5...

Mysql の主キーと一意キーの違いのまとめ

主キーとは何ですか?主キーは、テーブル内の各タプル (行) を一意に識別するテーブル内の列です。主キ...

Dockerは単一のイメージを使用して複数のポートにマッピングします

必要:公式サイトのリソースサーバーは確かに1つのインスタンスでは使えず、複数のインスタンスを一緒に使...

Zabbixについて管理者ログインパスワードを忘れた場合、パスワードをリセットする

Zabbix 管理者ログイン パスワードのリセットに関する問題は次のとおりです。 1. 問題の説明:...