文章目錄
前言Mysql在5.7.8開始對(duì)json原生支持,,本篇文章對(duì)mysql中使用json進(jìn)行些簡(jiǎn)單的總結(jié),希望能幫助到使用的朋友,。 參考: 1.創(chuàng)建表和插入數(shù)據(jù): CREATE TABLE tb_base_info ( id BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT, content JSON ); INSERT INTO tb_base_info (content) VALUES ( '{'author': 'Captain&D', 'blog': 'https://www.cnblogs.com/captainad'}' ); 2.查詢json中的使用字段:其中->>為去掉查詢的值的雙引號(hào),,->為帶著雙引號(hào)。 SELECT content ->> '$.blog' FROM tb_base_info 當(dāng)然json字段屬性也是支持過濾的: WHERE student->'$.id' in (1,5) WHERE student->'$.id' = 1 or student->'$.id' = 5; like使用查詢: where contact ->> '$.QQ' like '25%'; 如果存儲(chǔ)的是數(shù)組的話可以支持索引查詢: SELECT content ->> '$[0]' FROM tb_base_info 3.json科普:json的語法規(guī)則: (1)數(shù)據(jù)為鍵值對(duì)存儲(chǔ)key:val,;(2)數(shù)據(jù)由逗號(hào)分隔,;(3)大括號(hào)保存對(duì)象;(4)中括號(hào)保存數(shù)組,。 json數(shù)字可以是整型或者浮點(diǎn)型,。 json對(duì)象可以包含多個(gè)鍵值對(duì)。 json還可以是數(shù)組的格式,[{},{}],。 json邏輯值:{ “flag”:true } 4.mysql中操作json的函數(shù):4.1 JSON_ARRAY:生成json數(shù)組。JSON_ARRAY(val1,val2,val3...) 4.2 JSON_OBJECT:生成對(duì)象,。JSON_ARRAY(val1,val2,val3...) 4.3 JSON_CONTAINS:查詢指定數(shù)據(jù)是否存在,。JSON_CONTAINS(json_doc, val[, path]) 舉例: select name from student where json_contains(contact,''15037334666'','$.phone'); 結(jié)果說明:包含則返回1,否則返回0,。如果參數(shù)為 NULL 或 path 不存在,,則返回NULL 4.4 JSON_CONTAINS_PATH:查詢指定路徑是否存在。JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...) 舉例: select id,name,json_contains_path(contact,'one','$.phone') from student; 說明:存在則返回1,,否則返回0,。one_or_all 只能取值 “one” 或 “all”,one 表示只要有一個(gè)存在即可,,all表示所有的都存在才行 4.5 JSON_EXTRACT:查找指定的數(shù)據(jù):語法: JSON_EXTRACT(json_doc, path[, path] ...) 舉例: select id,name,json_extract(contact,'$.QQ') QQ from student;select id,name,json_extract(contact,'$.QQ','$.wechart') contact from student; 備注:如果抽取出多個(gè)path,,則返回的數(shù)據(jù)生成一個(gè) json array 4.6 獲取json中所有的keys:JSON_KEYS(json_doc[, path]) 舉例: select id,name,json_keys(contact) contact from student; 4.7 JSON_UNQUOTE:去掉 json 值的引號(hào)'JSON_UNQUOTE(val) 舉例: select id,name,json_unquote(json_extract(contact,'$.QQ')) QQ from student; 總結(jié)當(dāng)然mysql中還有其他未使用的json函數(shù),但是可能并不會(huì)很常用,,因?yàn)閙ysql的計(jì)算能力很差,,在真正的開發(fā)中我們還是要盡量的減少mysql的計(jì)算,盡可能的把業(yè)務(wù)計(jì)算放到業(yè)務(wù)代碼中取實(shí)現(xiàn),。 |
|