在mysql5.7.8之後開始支援一種可高效獲取json文字中資料的原生json型別,該型別具有以下優點:
另外,系統對json格式做了一些限制:
1. 建立表
2. 插入兩條資料
注意:json列儲存的必須是json格式資料,否則會報錯。
error 3140 (22032): invalid json text: "invalid value." at position 0 in value for column 'test.content'.
3. 查詢
這裡主要將關於json的查詢。
對於表中json資料的查詢,可以根據json中的key值進行查詢,看下面sql語句
對於索引,json欄位無法對其中的乙個key值進行索引,但是虛擬列可以,我們可以建立乙個虛擬列和json中key值建立聯絡。
1. 增加虛擬列v_name,v_host
注意:養成加字首的好習慣, 例如這裡使用"v_"來標記該字段是乙個虛擬字段,在團隊開發時,共同遵守乙個約定, 相互配合起來會非常順利。
下面對虛擬列建立索引
alter table test add index virtual_index(v_name);
然後檢視基於v_name的查詢的執行計畫
從結果來看,查詢已經走索引了。
上表中欄位資訊解釋
欄位名解釋
id選擇識別符號
select_type
查詢的型別
table
輸出結果的表,也就是被查詢的表
partions
表示匹配的分割槽
type
表示表的連線型別
possible_keys
表示查詢時,可能使用的索引
key表示實際使用的索引
key_len
表示欄位的長度
ref列與索引的比較
rows
掃瞄出的行數(估算的行數)
filtered
按查詢條件過濾的行百分比
extra
執**況的描述和說明
詳細的說明參考這篇部落格:
在mysql 5.7中,支援兩種generated column,即virtual generated column和stored generated column,前者只將generated column儲存在資料字典中(表的元資料),並不會將這一列資料持久化到磁碟上;後者會將generated column持久化到磁碟上,而不是每次讀取的時候計算所得。很明顯,後者存放了可以通過已有資料計算而得的資料,需要更多的磁碟空間,與virtual column相比並沒有優勢,因此,mysql 5.7中,不指定generated column的型別,預設是virtual column。
注意:在更新和插入資料時,不要給虛擬列設定值,否則會引發錯誤。
error 3105 (hy000): the value specified for generated column 'v_name' in table 'test' is not allowed.
mysql json資料型別
mysql從5.7.8版本開始支援json欄位,可以高效的處理json文件。相比字串字段,json欄位有下面的幾處優勢 json欄位的儲存空間要求與longblob和longtext是一樣的 l 4 bytes,where l 2 32 同時json欄位的預設值只能是null。為了操作json欄位,...
mysql json型別學習筆記
mysql從5.7.8版本開始支援json型別。json列儲存大小為系統的 max allowed packet json列不能擁有預設值。json型別值分為陣列和物件兩種型別 abc 10,null,true,false json的建立和插入 mysql create table t1 c1 js...
資料型別基礎資料型別
資料型別 基礎型別 除八大基礎型別其他的都是引用型資料型別 引用資料型別 基礎資料型別 整型 byte 佔乙個位元組,範圍 128 127 short 佔兩個位元組,範圍 32768 32767 int 最常用 佔四個位元組,範圍 2147483648 2147483647 long 佔八個位元組 ...