国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Mysql - MySQL5.7中的JSON基本操作指南

MySQL5.7中的JSON基本操作指南

2020-09-16 20:28南丞_ Mysql

這篇文章主要給大家介紹了關于MySQL5.7中JSON的基本操作,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Mysql具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

前言

因為項目需要,存儲字段存儲成了JSON格式,在項目中是將查詢出來的值通過jackson轉成相應的bean進行處理的,覺得不夠簡單方便。

MySQL從5.7版本開始就支持JSON格式的數據,操作用起來挺方便的。

建表

在新建表時字段類型可以直接設置為json類型,比如我們創建一張表:

?
1
mysql> CREATE TABLE `test_user`(`id` INT PRIMARY KEY AUTO_INCREMENT, `name` VARCHAR(50) NOT NULL, `info` JSON);

json類型字段可以為NULL

插入數據:

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

json類型的字段必須時一個有效的json字符串

可以使用JSON_OBJECT()函數構造json對象:

?
1
mysql> INSERT INTO test_user(`name`, `info`) VALUES('xiaohua', JSON_OBJECT("sex", 0, "age", 17));

使用JSON_ARRAY()函數構造json數組:

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

現在查看test_user表中的數據:

?
1
2
3
4
5
6
7
8
9
mysql> select * from test_user;
+----+-----------+--------------------------------------------+
| id | name | info     |
+----+-----------+--------------------------------------------+
| 1 | xiaoming | {"age": 18, "sex": 1, "nick_name": "小萌"} |
| 2 | xiaohua | {"age": 17, "sex": 0}   |
| 3 | xiaozhang | {"age": 19, "sex": 1, "tag": [3, 5, 90]} |
+----+-----------+--------------------------------------------+
3 rows in set (0.04 sec)

查詢

表達式: 對象為json列->'$.鍵', 數組為json列->'$.鍵[index]'

?
1
2
3
4
5
6
7
8
9
mysql> select name, info->'$.nick_name', info->'$.sex', info->'$.tag[0]' from test_user;
+-----------+---------------------+---------------+------------------+
| name | info->'$.nick_name' | info->'$.sex' | info->'$.tag[0]' |
+-----------+---------------------+---------------+------------------+
| xiaoming | "小萌"  | 1  | NULL  |
| xiaohua | NULL  | 0  | NULL  |
| xiaozhang | NULL  | 1  | 3  |
+-----------+---------------------+---------------+------------------+
3 rows in set (0.04 sec)

等價于:對象為JSON_EXTRACT(json列 , '$.鍵') ,數組為JSON_EXTRACT(json列 , '$.鍵[index]')

?
1
2
3
4
5
6
7
8
9
mysql> select name, JSON_EXTRACT(info, '$.nick_name'), JSON_EXTRACT(info, '$.sex'), JSON_EXTRACT(info, '$.tag[0]') from test_user;
 +-----------+-----------------------------------+-----------------------------+--------------------------------+
| name | JSON_EXTRACT(info, '$.nick_name') | JSON_EXTRACT(info, '$.sex') | JSON_EXTRACT(info, '$.tag[0]')
| +-----------+-----------------------------------+-----------------------------+--------------------------------+
| xiaoming | "小萌"    | 1    | NULL    |
| xiaohua | NULL    | 0    | NULL    |
| xiaozhang | NULL    | 1    | 3    |
+-----------+-----------------------------------+-----------------------------+--------------------------------+
3 rows in set (0.04 sec)

不過看到上面"小萌"是帶雙引號的,這不是我們想要的,可以用JSON_UNQUOTE函數將雙引號去掉

?
1
2
3
4
5
6
7
mysql> select name, JSON_UNQUOTE(info->'$.nick_name') from test_user where name='xiaoming';
+----------+-----------------------------------+
| name | JSON_UNQUOTE(info->'$.nick_name') |
+----------+-----------------------------------+
| xiaoming | 小萌    |
+----------+-----------------------------------+
1 row in set (0.05 sec)

也可以直接使用操作符->>

?
1
2
3
4
5
6
7
mysql> select name, info->>'$.nick_name' from test_user where name='xiaoming';
+----------+----------------------+
| name | info->>'$.nick_name' |
+----------+----------------------+
| xiaoming | 小萌   |
+----------+----------------------+
1 row in set (0.06 sec)

當然屬性也可以作為查詢條件

?
1
2
3
4
5
6
7
mysql> select name, info->>'$.nick_name' from test_user where info->'$.nick_name'='小萌';
+----------+----------------------+
| name | info->>'$.nick_name' |
+----------+----------------------+
| xiaoming | 小萌   |
+----------+----------------------+
1 row in set (0.05 sec)

值得一提的是,可以通過虛擬列對JSON類型的指定屬性進行快速查詢。

創建虛擬列:

?
1
mysql> ALTER TABLE `test_user` ADD `nick_name` VARCHAR(50) GENERATED ALWAYS AS (info->>'$.nick_name') VIRTUAL;

注意用操作符->>

使用時和普通類型的列查詢是一樣:

?
1
2
3
4
5
6
7
mysql> select name,nick_name from test_user where nick_name='小萌';
+----------+-----------+
| name  | nick_name |
+----------+-----------+
| xiaoming | 小萌  |
+----------+-----------+
1 row in set (0.05 sec)

更新

使用JSON_INSERT()插入新值,但不會覆蓋已經存在的值

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

看下結果

?
1
2
3
4
5
6
7
mysql> select * from test_user where id=2;
+----+---------+--------------------------------------------+-----------+
| id | name | info          | nick_name |
+----+---------+--------------------------------------------+-----------+
| 2 | xiaohua | {"age": 17, "sex": 0, "nick_name": "小花"} | 小花  |
+----+---------+--------------------------------------------+-----------+
1 row in set (0.06 sec)

使用JSON_SET()插入新值,并覆蓋已經存在的值

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

看下結果

?
1
2
3
4
5
6
7
mysql> select * from test_user where id=3;
+----+-----------+---------------------------------------------------------------+-----------+
| id | name  | info               | nick_name |
+----+-----------+---------------------------------------------------------------+-----------+
| 3 | xiaozhang | {"age": 19, "sex": 1, "tag": [3, 5, 90], "nick_name": "小張"} | 小張  |
+----+-----------+---------------------------------------------------------------+-----------+
1 row in set (0.06 sec)

使用JSON_REPLACE()只替換存在的值

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

看下結果

?
1
2
3
4
5
6
7
mysql> select * from test_user where id=2;
+----+---------+--------------------------------------------+-----------+
| id | name | info          | nick_name |
+----+---------+--------------------------------------------+-----------+
| 2 | xiaohua | {"age": 17, "sex": 1, "nick_name": "小花"} | 小花  |
+----+---------+--------------------------------------------+-----------+
1 row in set (0.06 sec)

可以看到tag沒有更新進去

刪除

使用JSON_REMOVE()刪除JSON元素

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

看下結果

?
1
2
3
4
5
6
7
mysql> select * from test_user where id=1;
+----+----------+----------------------------------+-----------+
| id | name  | info        | nick_name |
+----+----------+----------------------------------+-----------+
| 1 | xiaoming | {"age": 18, "nick_name": "小萌"} | 小萌  |
+----+----------+----------------------------------+-----------+
1 row in set (0.05 sec)

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對服務器之家的支持。

原文鏈接:https://segmentfault.com/a/1190000018612255

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 天天操天天拍 | 岛国av在线免费观看 | 九九九色| 波多野结衣一二三四区 | 日韩有码视频在线 | 国产成人午夜精品5599 | 欧美久久久久久久久久久 | 超色视频在线观看 | 免费又黄又爽又色的视频 | 国产成人免费 | 影音先锋亚洲精品 | 台湾一级特黄aa大片免费看 | 99热在线播放 | 91精品国产一区二区三区四区在线 | 亚洲一区中文字幕在线观看 | 看欧美一级片 | 91久久 | 日韩成人一区二区 | 日韩国产欧美亚洲 | 国产日产欧产美韩av | 亚洲一区二区三区在线播放 | 欧美成人a | 久久国产精品一区二区 | 日本一区二区视频 | 欧美日本精品 | 国内美女人妻一级毛片免费看 | 99久久精品一区二区成人 | 欧美日韩在线播放 | 免费a级毛片大学生免费观看 | 成人网av| 黄瓜av在线 | 麻豆二区 | 一本黄色片 | 日韩国产精品一区二区 | 久久久久久久国产精品 | 亚洲国产精品网站 | 91麻豆精品国产91久久久更新资源速度超快 | 日韩中文字幕在线观看 | 男女视频网站 | 国产成人在线一区二区 | 中文字幕超清在线免费 |