MySQL中 JSON 資料型別應用
阿新 • • 發佈:2019-01-24
前言
今天接觸到mysql中json資料型別,之前不知道有這個型別,今天學習一下。
JSON我相信大家都已經很熟悉了,但在 MySQL中,直至 5.7 版本中,才正式引入 JSON資料型別。在次之前,我們通常使varchar或text資料型別儲存JSON格式資料。
如何使用JSON?
在這一章節,不再具體介紹JSON格式以及語法,我們來介紹一下,在MySQL中如何建立JSON資料列。 語法:
create table t_base_data(
id bigint(20) not null primary key auto_increment,
content json
)
新增資料:
insert into t_base_data (content)values('{"blog": "https://blog.csdn.net/qq_24549805", "account": "anzy"}');
注意:
JSON列儲存的必須是JSON格式資料,否則會報錯。([SQL]insert into t_base_data (content)values('{blog": "https://blog.csdn.net/qq_24549805", "account": "anzy"}');
[Err] 3140 - Invalid JSON text: "Missing a name for object member." at position 1 in value for column 't_base_data.content'JSON資料型別是沒有預設值的。
更新資料:
UPDATE t_base_data SET `content` = '{"blog":"測試更新啦","account":"pine"}' WHERE `id` = 1;
查詢資料:
SELECT * from t_base_data;
select JSON_EXTRACT(content,'$.blog'),JSON_EXTRACT(content,'$.account') from t_base_data;
返回結果如圖:
可以看出JSON被解析拆分,但對於字串會保留雙引號,這種是利用函式方法進行JSON提取的,還可以利用虛列virtual
有了虛列後就可以直接用虛列作為條件查詢select JSON_EXTRACT(content,'$.blog'),JSON_EXTRACT(content,'$.account'),JSON_EXTRACT(content,'$.age') from t_base_data;
explain select blog from t_base_data where blog = 'https://blog.csdn.net/qq_24549805';
select blog from t_base_data where blog = '"https://blog.csdn.net/qq_24549805"'
通過執行計劃可以看出是否走索引和where條件,對於虛列還可以增加索引,就像普通的列一樣,不過更新時不需要對虛列再進行更新,直接更新JSON的內容後,虛列會同步更新,因為虛列其實就是個引用,不會冗餘儲存增加虛列索引的SQL:
alter table t_base_data add index index_virtual (blog);
再用執行計劃檢視是否走索引 explain select blog from t_base_data where blog = 'https://blog.csdn.net/qq_24549805';
從結果上看已經走索引了,優化效果達到。
大家儘量每一步sql都執行一下看看結果,有助於理解。