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

推薦する

DockerのTLS(SSL)証明書の有効期限の問題を解決する

問題現象: [root@localhost ~]# docker イメージをプル xxx.com.c...

CSS3はリストの無限スクロール/カルーセル効果を実現します

効果プレビューアイデア現在のリストを最後の項目までスクロールし、すぐに最初の項目に戻ります。問題1....

CSSはマウスが画像に移動したときにマスク効果を実現します

1.マスクレイヤーのHTMLコードと画像をdivに配置する.img_div に入れました。 <...

Spark SQL の 4 つの一般的なデータ ソースの詳細な説明

汎用ロード/書き込みメソッドオプションを手動で指定するSpark SQL の DataFrame イ...

MySQL エラー: 接続数が多すぎる場合の解決策

MySQLデータベースの接続が多すぎますこのエラーは明らかに、mysql_connect の後に m...

Centos7 インストール mysql5.6.29 シェル スクリプト

この記事では、参考までにmysql5.6.29のシェルスクリプトを共有します。具体的な内容は次のとお...

Mysql SSHトンネル接続を使用するための基本的な手順

序文セキュリティ上の理由から、MySQL の root ユーザーはローカルにのみログインでき、外部ネ...

Linux Bash スクリプトを使用してユーザーを識別する方法の例

多くの場合、bash スクリプト内またはスクリプト自体内で直接 sudo を使用してコマンドを実行す...

Linux の daily_routine サンプルコードの詳細な説明

まずサンプルコードを見てみましょう: #/bin/bash cal 日付 -u echo "...

Linux での screen コマンドの使用方法の詳細な説明

GUNスクリーン:公式サイト: http://www.gnu.org/software/screen...

画像の一時停止を実現するjQueryプラグイン

この記事では、画像の一時停止を実現するためのjQueryプラグインの具体的なコードを参考までに共有し...

MySQL sql99構文の内部結合と非等価結合の詳細な説明

#事例: 従業員の給与水準を照会する 選択 給与、等級 から 従業員 参加する ジョブグレード g ...

MySQL テーブル分割後にスムーズにオンラインになる方法

目次テーブルの目的例えばテーブル分割戦略すでにオンラインになっている実行中のテーブルはどうすればよい...

vue-video-player を使用してライブ放送を実現する方法

目次1. vue-video-playerをインストールする2. vue-video-playerを...