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がセッションを管理する方法の例

推薦する

Linux の RPM パッケージでインストールされた xinetd ベースのサービスの管理

目次序文1. xinetdサービスに基づく起動管理(1)Telnetサービスのインストール(2)Te...

MySQLトリガーについて深く理解するための記事

目次1. SC テーブルを挿入または変更するときに、テスト スコアが 0 ~ 100 の範囲外の場合...

Ubuntu 18.04 のすべての Python ライブラリを一度にアップグレードする方法

ピップとは何かpip は、Python パッケージの検索、ダウンロード、インストール、アンインストー...

http.server に基づく LAN サーバーの構築プロセスの分析

皆さんはこのような状況に遭遇したことがあるでしょうか。プロジェクトや研究開発を行う際に、緊急にファイ...

Docker+nextcloudで個人用クラウドストレージシステムを構築

1. Dockerのインストールと起動 yum で epel-release をインストールします ...

mysql explain(分析インデックス)の使い方の詳しい説明

EXPLAIN は、MySQL がインデックスを使用して選択ステートメントを処理し、テーブルを結合す...

ウェブページの幅を携帯電話の画面(ビューポート)の幅に自動的に適応させる実装コード

一般的な書き方は次のとおりです。 XML/HTML コードコンテンツをクリップボードにコピー<...

VMware を使用して PXE バッチ インストール サーバーをテストする詳細なプロセス

目次1. 準備1. 環境を整える2. インストール方法3. ネットワークカードの構成2. インストー...

Ubuntu でホームディレクトリを新しいパーティションに移行する詳細なチュートリアル

ユーザーのホーム ディレクトリがどんどん大きくなってきたら、ホーム ディレクトリを新しいパーティショ...

データベースSQL文の最適化

最適化する理由:実際のプロジェクトが開始され、データベースが一定期間稼働した後、初期のデータベース設...

初心者向けに Docker に Jenkins をインストールする方法を詳しく説明したチュートリアル

Jenkins はオープンソース ソフトウェア プロジェクトです。Java をベースに開発された継続...

MySQL リンクを表示し、異常なリンクを削除する方法

序文:データベースの運用や保守の際には、リンクの総数がいくつあるか、アクティブなリンクがいくつあるか...

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

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

Docker Compose ネットワーク設定の説明

基本概念デフォルトでは、Compose はアプリケーション用のネットワークを作成し、サービスの各コン...

Nginx 転送ソケットポート設定の詳細な説明

Nginx によるソケット ポート転送の一般的なシナリオ: オンライン学習アプリケーションでは、通常...