測試環境:
内容簡介:
随着mysql5.7版本的到來,大家對其的熱情也越來越高漲,身為mysql圈子裡的一員,我本身也對mysql5.7的一些新特性有所了解,通過學習了解到了很多新的特性,今天給大家介紹一下它在靈活性方面的一個新的功能:提供對JSON的支援
JSON介紹
通俗的講就是,JSON資料類型 可以存儲一些複雜的資料類型,例如字元串、數字、對象、數組等。将一些平時比較複雜的資料存儲,簡單化,便于人們存儲與閱讀。
JSON存儲方式:
對于時間類型的存儲
對于對象來說:一般使用鍵值對的方式存儲
一般JSON的存儲對象的格式是這樣的:
這很容易了解,等價于這條 JavaScript 語句:
Mysql支援JSON的原因:
随着非結構化資料存儲需求的持續增長,各種非結構化資料存儲的資料庫應運而生(如MongoDB)。從最新的資料庫使用 排行榜 來看,MongoDB已經超過了PostgreSQL,其火熱程度可見一斑。
各大關系型資料庫也不甘示弱,紛紛提供對JSON的支援,以應對非結構化資料庫的挑戰。MySQL資料庫從5.7.8版本開始,也提供了對JSON的支援。
MySQL對支援JSON的做法是,在server層提供了一堆便于操作JSON的函數,至于存儲,就是簡單地将JSON編碼成BLOB,然後交由存儲引擎層進行處理,也就是說,MySQL 5.7的JSON支援與存儲引擎沒有關系,MyISAM 存儲引擎也支援JSON 格式。
MySQL支援JSON以後,總是避免不了拿來與MongoDB進行一些比較。但是,MySQL對JSON的支援,至少有兩點能夠完勝MongoDB:
1.可以混合存儲結構化資料和非結構化資料,同時擁有關系型資料庫和非關系型資料庫的優點
2.能夠提供完整的事務支援
下面我在mysql中做一下對于JOSN的一些測驗,來實驗一下它的功能。
1.首先我建立了一個用JSON存儲的表

2.插入資料
3.對json中資料進行測驗檢驗功能:
(1)先插入一條資料 做一下 group by的 實驗
(2)插入一條部分内容為空的資料,看一下JSON的相容性問題
(3)建立索引
然後在确定一下是否走了索引
确定了一下确實走了索引,
4.對于支援失事物的檢驗:
我想這就是為什麼mysql支援JSON後的優勢所在,它可以支援事物!
(1) 開啟事物檢視一下原表
(2)插入一行資料
Rollback一下
經過以上的各個檢驗與驗證,測試了一些關于JSON的功能,個人覺得它支援的功能很強大,非常值得使用。
由此可見對于mysql來說,用JSON的方式存儲資料類似于‘表中表’,當業務資料變化非常快時,可以利用JSON來存儲,以此來提高資料庫的靈活性,當業務穩定下來時,通過之前寫入的tirgger , 每個json都運算json_extract(data,'$.name') ,然後寫到一個新的不可修改的列裡。是以MySQL添加的JSON資料類型讓關系資料庫用起來更簡單,并且模糊了SQL和NoSQL資料庫的界限。
缺點
JSON同樣也存在很多缺點:
JSON是一種非正式儲存資料的好方式。但是關系資料庫在标準化資料上很有強大,所有的資料都被标準化到小組成部分中來提高通路速度。并且,有的資料可能缺乏應用的嚴格性,比如當記錄一個電子郵件位址的時候,key值可能是email,eMail,e-mail,或者其他變體。