MySQL5 7 JSON型別使用詳解

2022-09-27 05:15:13 字數 3009 閱讀 3363

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