1. 程式人生 > >MySQL中 JSON 資料型別應用

MySQL中 JSON 資料型別應用

前言

      今天接觸到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"}');

注意:

  1. 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'

    .)

  2. 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都執行一下看看結果,有助於理解。