mysql5.7 新增的json字段類(lèi)型用法實(shí)例分析
本文實(shí)例講述了mysql5.7 新增的json字段類(lèi)型用法。分享給大家供大家參考,具體如下:
一、我們先創(chuàng)建一個(gè)表,準(zhǔn)備點(diǎn)數(shù)據(jù)
CREATE TABLE `json_test` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', `json` json DEFAULT NULL COMMENT 'json數(shù)據(jù)', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

二、檢索json列的字段
通過(guò)使用 -> 或 ->> 運(yùn)算符檢索json列的字段
select id, json->'$[0].items[0].name' from json_test;

select id, json->>'$[0].items[0].name' from json_test;

使用 -> 和 ->> 的區(qū)別是結(jié)果用了引號(hào)包裹。
三、處理json的一些函數(shù)
JSON_PRETTY(json_val) 以優(yōu)雅的格式顯示json值
select id, JSON_PRETTY(json) from json_test\G;
JSON_CONTAINS(target, candidate[, path]) 判斷給定的candidate是否包含在target中,如果指定了path,則在指定路徑中進(jìn)行查找。
注意,注意,注意,這里的candidate如果是數(shù)字,需要用單引號(hào)包裹,如果是字符串,單引號(hào)里再加上雙引號(hào)包裹。
select JSON_CONTAINS(json->'$[0].name', '"1號(hào)籃子"') from json_test; select JSON_CONTAINS(json, '"1號(hào)籃子"', '$[0].name') from json_test;
JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...) 判斷json_doc中的路徑是否存在,通俗點(diǎn)說(shuō)就是json中的key是否存在
select JSON_CONTAINS_PATH(json, 'one', '$[0].name', '$[0].test') from json_test;
第二個(gè)參數(shù)'one'表示只要有一個(gè)key存在就返回1,否則為0
select JSON_CONTAINS_PATH(json, 'all', '$[0].name', '$[0].test') from json_test;
第二個(gè)參數(shù)'all'表示所有key存在才返回1,否則為0
JSON_SET(json_doc, path, val[, path, val] ...) 插入或更新數(shù)據(jù)并返回結(jié)果
select JSON_SET(json, '$[0].name', '2號(hào)籃子', '$[0].test', 'test') from json_test;
我們修改$[0].name的值,并添加一個(gè)key為test,值為test的項(xiàng)
JSON_INSERT(json_doc, path, val[, path, val] ...) 插入數(shù)據(jù)并返回結(jié)果,但不替換現(xiàn)有值。
select JSON_INSERT(json, '$[0].name', '2號(hào)籃子', '$[0].exts', '擴(kuò)展') from json_test;
這時(shí)$[0].name不會(huì)被更新,只會(huì)新增一個(gè)字段$[0].exts
JSON_REPLACE(json_doc, path, val[, path, val] ...) 替換現(xiàn)有值并返回結(jié)果
select JSON_REPLACE(json, '$[0].name', '替換') from json_test;
將$[0].name中的值替換成新值
JSON_REMOVE(json_doc, path[, path] ...) 刪除數(shù)據(jù)并返回結(jié)果
select JSON_REMOVE(json, '$[0].name') from json_test;
刪除$[0].name這項(xiàng)數(shù)據(jù)
JSON_KEYS(json_doc[, path]) 獲取json文檔中的所有鍵
select JSON_KEYS(json, '$[0]') from json_test;
獲取$[0]路徑下的所有鍵
JSON_LENGTH(json_doc[, path]) 獲取json文檔的長(zhǎng)度
select JSON_LENGTH(json, '$[0]') from json_test;
獲取$[0]下的元素?cái)?shù)量
JSON_EXTRACT(json_doc, path[, path] ...) 返回json文檔中的數(shù)據(jù)
select JSON_EXTRACT(json, '$[0]') from json_test; select JSON_EXTRACT(json, '$[0].name') from json_test;
返回json文檔指定路徑下的數(shù)據(jù)
JSON_ARRAY([val[, val] ...]) 創(chuàng)建json數(shù)組
select JSON_ARRAY(1, '2', true, 5.6, null, now());
JSON_OBJECT([key, val[, key, val] ...]) 通過(guò)鍵值對(duì), 創(chuàng)建json對(duì)象
select JSON_OBJECT('name', 'xiaoxu', 'age', 28, 'height', 1.72);
注意,這里鍵和值要成對(duì)出現(xiàn)
JSON_MERGE_PATCH(json_doc, json_doc[, json_doc] ...) 合并json文檔,如果有重復(fù)鍵,后面的數(shù)據(jù)覆蓋前面的
select JSON_MERGE_PATCH('{"name":"test1"}', '{"name":"test2"}');
JSON_MERGE_PRESERVE(json_doc, json_doc[, json_doc] ...) 合并json文檔,如果有重復(fù)鍵,則會(huì)通過(guò)數(shù)組把值都保存起來(lái)
select JSON_MERGE_PRESERVE('{"name":"test1"}', '{"name":"test2"}');
JSON_QUOTE(string) 通過(guò)用雙引號(hào)字符包裹并轉(zhuǎn)義內(nèi)部引號(hào)和其他字符
select JSON_QUOTE('你好"世界"');
JSON_UNQUOTE(json_val) 將轉(zhuǎn)義字符轉(zhuǎn)換回普通字符
select JSON_UNQUOTE('你好\\t\"世界\"');
更多關(guān)于MySQL相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《MySQL查詢技巧大全》、《MySQL常用函數(shù)大匯總》、《MySQL日志操作技巧大全》、《MySQL事務(wù)操作技巧匯總》、《MySQL存儲(chǔ)過(guò)程技巧大全》及《MySQL數(shù)據(jù)庫(kù)鎖相關(guān)技巧匯總》
希望本文所述對(duì)大家MySQL數(shù)據(jù)庫(kù)計(jì)有所幫助。
相關(guān)文章
淺談MYSQL中樹(shù)形結(jié)構(gòu)表3種設(shè)計(jì)優(yōu)劣分析與分享
在開(kāi)發(fā)中經(jīng)常遇到樹(shù)形結(jié)構(gòu)的場(chǎng)景,本文將以部門(mén)表為例對(duì)比幾種設(shè)計(jì)的優(yōu)缺點(diǎn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
MySQL數(shù)據(jù)庫(kù)的索引原理與慢SQL優(yōu)化的5大原則
這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)的索引原理與慢SQL優(yōu)化的5大原則,包括:建立索引的原則,慢查詢優(yōu)化基本步驟,慢查詢優(yōu)化案例,explain使用,需要的朋友可以參考下2023-02-02
mysql格式化小數(shù)保留小數(shù)點(diǎn)后兩位(小數(shù)點(diǎn)格式化)
今天遇到一個(gè)問(wèn)題,格式化浮點(diǎn)數(shù)的問(wèn)題,用format(col,2)保留兩位小數(shù)點(diǎn),出現(xiàn)一個(gè)問(wèn)題,例如下面的語(yǔ)句,后面我們給出解決方法2013-12-12
MySQL中join語(yǔ)句的基本使用教程及其字段對(duì)性能的影響
這篇文章主要介紹了MySQL中join語(yǔ)句的基本使用及其字段對(duì)性能的影響,舉了實(shí)例來(lái)觀測(cè)join所作用的不同字段字符集編碼所造成的性能差異,需要的朋友可以參考下2015-12-12
MySql數(shù)據(jù)庫(kù)中Select用法小結(jié)
在程序開(kāi)發(fā)中數(shù)據(jù)庫(kù)是必要知識(shí)點(diǎn),今天小編給大家介紹mysql數(shù)據(jù)庫(kù)中的select用法,包括條件篩選、指定篩選和分組顯示查詢語(yǔ)句的寫(xiě)法,非常不錯(cuò),對(duì)mysql select用法相關(guān)知識(shí)感興趣的朋友一起看看吧2016-10-10
mysql服務(wù)設(shè)置遠(yuǎn)程連接如何解決1251 client does not su
文章介紹了如何在遠(yuǎn)程主機(jī)上配置MySQL環(huán)境,并使用Navicat連接遠(yuǎn)程MySQL數(shù)據(jù)庫(kù)的步驟,包括前期準(zhǔn)備、mysql配置以及使用Navicat連接的過(guò)程2024-12-12
mysql exists與not exists實(shí)例詳解
這篇文章主要介紹了mysql exists與not exists實(shí)例詳解的相關(guān)資料,鑒于 not exists 的效率往往要高于 not in , 所以一般情況下會(huì)使用前者替代后者,需要的朋友可以參考下2017-07-07

