MySQL 5 7的原生JSON資料型別使用

2022-01-13 06:22:48 字數 3007 閱讀 9896

新增測試用表:

create table lnmp (

`id`

int(10

) unsigned not null auto_increment,

`category` json,

`tags` json,

primary key (`id`)

);

新增資料:

insert into `lnmp` (category, tags) values ('

', '

[1, 2, 3]');

insert into `lnmp` (category, tags) values (json_object("id

", 2, "

name

", "

php.net

"), json_array(1, 3, 5));

分別是兩種不同的方式新增

查詢:顯示json格式內部字段:

select id, category->'

$.id

', category->'

$.name

', tags->'

$[0]

', tags->'

$[2]

' from lnmp;

去除掉預設雙引號:

select id, category->'

$.name

', json_unquote(category->'

$.name

'), category->>'

$.name

' from lnmp;

條件查詢:

select * from lnmp where category = cast('

'as json);

必須使用cast轉換為json型別

如果不轉換就相當於查詢string,是查詢不到資料的。

使用json內屬性進行條件查詢:

select * from lnmp where category->'

$.name

' = '

lnmp.cn';

select * from lnmp where category->>'

$.name

' = '

lnmp.cn

';

兩種皆可

要特別注意的是,json 中的元素搜尋是嚴格區分變數型別的,比如說整型和字串是嚴格區分的

select * from lnmp where category->'

$.id

' = 1;

除了用 column->path 的形式搜尋,還可以用json_contains 函式,但和 column->path 的形式有點相反的是,json_contains 第二個引數是不接受整數的,無論 json 元素是整型還是字串,否則會出現這個錯誤

select * from lnmp where json_contains(category, '

1', '

$.id

');

對於陣列型別的 json 的查詢,比如說 tags 中包含有 2 的資料,同樣要用 json_contains 函式,同樣第二個引數也需要是字串

select * from lnmp where json_contains(tags, '

2');

更新json:

update lnmp set tags = '

[1, 3, 4]

' where id = 1;

但如果要更新 json 下的元素,mysql 並不支援 column->path 的形式

則可能要用到以下幾個函式

json_insert() 插入新值,但不會覆蓋已經存在的值

update lnmp set category = json_insert(category, '

$.name

', '

lnmp

', '

$.url

', '

www.lnmp.cn

') where id = 1;

可以看到 name 沒有被修改,但新元素 url 已經新增進去

json_set() 插入新值,並覆蓋已經存在的值

update lnmp set category = json_set(category, '

$.host

', '

www.lnmp.cn

', '

$.url

', '

') where id = 1;

可以看到 host 已經插入,url 已經被修改

json_replace() 只替換存在的值

update lnmp set category = json_replace(category, '

$.name

', '

php', '

$.url

', '

') where id = 2;

可以看到 name 已經被替換,url 不存在被忽略。

json_remove() 刪除 json 元素

update lnmp set category = json_remove(category, '

$.url

', '

$.host

') where id = 1;

/mysql-57-new-features-json.html

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

mysql5 7支援的原生態json格式

在mysql5.7中可以直接儲存json格式,並且可以對json資料進行讀取 如果要解析第乙個陣列成員請使用 json extract data,0 要搜尋用 json search data,one 關鍵字 或者json search data,all 關鍵字 第乙個是搜乙個,後面是搜出全部。se...

mysql5 7 新增的json欄位型別

一 我們先建立乙個表,準備點資料 create table json test id int 11 unsigned not null auto increment comment id json json default null comment json資料 二 檢索json列的字段 通過使用 ...