json是一種輕量級的資料交換格式,採用了獨立於語言的文字格式,類似xml,但是比xml簡單,易讀並且易編寫。對機器來說易於解析和生成,並且會減少網路頻寬的傳輸。
json的格式非常簡單:名稱/鍵值。之前mysql版本裡面要實現這樣的儲存,要麼用varchar要麼用text大文字。 mysql5.7發布後,專門設計了json資料型別以及關於這種型別的檢索以及其他函式解析。 我們先看看mysql老版本的json訪問。
示例表結構:
create table json_test(
id int,
person_desc text
)engine innodb;
我們來插入一條記錄:
nsert into json_test values (1,', , ],
"authors": [, , ],
"musicians": [, ]
}');
那一般我們遇到這樣來儲存json格式的話,只能把這條記錄取出來交個應用程式,有應用程式來解析。
現在到了mysql5.7,我們重新修改下表結構:
alter table json_test modify person_desc json;
先看看插入的這行json資料有哪些key:
mysql> select id,json_keys(person_desc) as "keys" from json_test\g
*************************** 1. row ***************************
id 1
keys: ["authors", "musicians", "programmers"]
row in set (0.00 sec)
我們可以看到,裡面有三個key,分別為authors,musicians,programmers。那現在找乙個key把對應的值拿出來:
mysql> select json_extract(authors,'$.lastname[0]') as 'name', authors from
-> (
-> select id,json_extract(person_desc,'$.authors[0][0]') as "authors" from json_test
-> union all
-> select id,json_extract(person_desc,'$.authors[1][0]') as "authors" from json_test
-> union all
-> select id,json_extract(person_des'$.authors[2][0]') as "authors" from json_test
-> ) as t1
-> order by name desc\g
*************************** 1. row ***************************
name: "williams"
authors:
*************************** 2. row ***************************
name: "peretti"
authors:
*************************** 3. row ***************************
name: "asimov"
authors:
3 rows in set (0.00 sec)
現在來把詳細的值羅列出來:
mysql> select
-> json_extract(authors,'$.firstname[0]') as "firstname",
-> json_extract(authors,'$.lastname[0]') as "lastname",
-> json_extract(authors,'$.genre[0]') as "genre"
-> from
-> (
-> select id,json_extract(person_desc,'$.authors[0]') as "authors" from json
_test
-> ) as t\g
*************************** 1. row ***************************
firstname: "isaac"
lastname: "asimov"
genre: "sciencefiction"
row in set (0.00 sec)
我們進一步來演示把authors 這個key對應的所有物件刪掉。
mysql> update json_test
-程式設計客棧》 set person_desc = json_remove(person_desc,'$.authors')\g
query ok, 1 row affected (0.01 sec)
rows matched: 1 changed: 1 warnings: 0
查詢下對應的key,發現已經被刪除掉了www.cppcns.com。
mysql> select json_contains_path(person_desc,'all','$.authors') as authors_exist
s from json_test\g
*************************** 1. row ***************************
authors_exists: 0
row in set (0.00 sec)
總結下, 雖然mysql5.7 開始支援json資料型別,但是我建議如果要使用的話,最好是把這樣的值取出來,然後在應用程式段來計算,畢竟資料庫是用來處理簡單資料的。
總結本文標題: mysql5.7 json型別使用詳解
本文位址:
MySQL 5 7 JSON相關操作
親身試驗過 官網ip create table demo id int unsigned primary key auto increment,comment json insert into demo id,name values 1,檢查第一層的key值 json keys select jso...
簡單談談MySQL5 7 JSON格式檢索
mysql 5.7.7 labs版本開始innodb儲存引擎已經原生支援json格式,該格式不是簡單的blob類似的替換。下面我們來詳細 下吧 mysql5.7版本開始支援json格式,在建立表時,可以指定列表的資料型別為json,但是如何在json格式上建立索引呢?本人做了乙個簡單測試。第一步 建...
MySQL 5 7的原生JSON資料型別使用
新增測試用表 create table lnmp id int 10 unsigned not null auto increment,category json,tags json,primary key id 新增資料 insert into lnmp category,tags values ...