mysql json培训文档

mysql json培训文档

  • 前言
  • 一、创建表
  • 二、函数
    • JSON_ARRAY
    • JSON_ARRAY_INSERT
    • JSON_ARRAY_APEND
    • JSON_OBJECT
    • JSON_INSERT
    • JSON_SET
    • JSON_REPLACE
    • JSON_REMOVE
    • JSON_EXTRACT 和->
    • JSON_LENGTH
    • JSON_CONTAINS_PATH
    • JSON_CONTAINS
    • JSON_UNQUOTE和->>
    • JSON_SEARCH
  • 三、数据演示
  • 四、官方文档下载

前言

mysql自5.7.8版本开始,就支持了json结构的数据存储和查询

mysql json培训文档_第1张图片

mysql json培训文档_第2张图片
mysql8新特性: https://blog.csdn.net/xianjuke008/article/details/86507622?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159592295519725250116614%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=159592295519725250116614&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-1-86507622.first_rank_ecpm_v3_pc_rank_v4&utm_term=mysql8%E6%96%B0%E7%89%B9%E6%80%A7&spm=1018.2118.3001.4187

一、创建表

create table testjson(
  `id` int(20) NOT NULL COMMENT '编号',
  `content` json COMMENT '内容',
  PRIMARY KEY (`id`) USING BTREE
)

二、函数

函数名称 描述
JSON_OBJECT 创建一个json对象
JSON_ARRAY 创建一个数组
JSON_INSERT 对json对象增加属性
JSON_ARRAY_INSERT 对json数组增加元素
JSON_ARRAY_APPEND 对json数组或者对象的值变为array
JSON_SET 如果不存在,增加,如果存在,替换现有值
JSON_REPLACE 替换现有值
JSON_REMOVE 删除指定json的属性
JSON_EXTRACT 返回json的指定值
-> 等价于JSON_EXTRACT
JSON_LENGTH 返回json文档里面元素个数
JSON_CONTAINS_PATH 判断路径是否存在,0表示不存在,1表示存在
JSON_CONTAINS 判断文档内容是否存在,0表示不存在,1表示存在
JSON_UNQUOTE 去除json字符串的引号,将值转成string类型
->> 等价于JSON_UNQUOTE json_unquote(column -> path)的简洁写法
JSON_SEARCH 按给定字符串关键字搜索json,返回匹配的路径

JSON_ARRAY

创建一个json数组

set @a=JSON_ARRAY(1,2,'x',3,'y','scx');

JSON_ARRAY_INSERT

插入数组

set @a = JSON_ARRAY_INSERT(@a,'$[1]','a')
-- select @a 结果[1,'a',2,'x',3,'y','scx']

JSON_ARRAY_APEND

如果是数组添加到后面,如果不是数组,先转成数组再添加到后面

set @a = JSON_ARRAY_APEND(@a,'$[0]','z')
-- select @a 结果[[1,'z'],'a',2,'x',3,'y','scx']
set @c=JSON_OBJECT('id',1,'content','tx');
set @c = JSON_ARRAY_APEND(@c,'$.content','z')
-- select @c 结果{"id":1,"content":["tx","z"]}

JSON_OBJECT

创建一个json对象(奇数位置是key,偶数位置是value)

set @b=JSON_OBJECT('id',1,'name','tx','age',18);

JSON_INSERT

插入新的属性,不对旧属性做修改

set @b = JSON_INSERT(@b,'$.content','abc')
-- select @b 结果 {"id":1, "name":"tx", "age":18 ,"content":"abc"}
-- set @b = JSON_INSERT(@b,'$.id',2)无效

JSON_SET

替换原有值,增加新值

set @d = JSON_OBJECT('id',1,'name','tx')
select JSON_SET(@d,'$.name','xx','$.age',22)
-- 结果 {"id":1, "name":"xx", "age":22}

JSON_REPLACE

仅替换原有值

select JSON_REPLACE(@d,'$.name','tangxiang')
-- 结果 {"id":1, "name":"tangxiang", "age":22}

JSON_REMOVE

移除属性

select JSON_REMOVE(@d,'$.age')
-- 结果 {"id":1, "name":"tangxiang"}

JSON_EXTRACT 和->

查询json的属性值

select JSON_EXTRACT(@d,'$.name');
-- 结果"tx"
select content->'$.name' from json_demo where id=1;
-- 注意 -> 这种写法必须是列的情况

JSON_LENGTH

查询json文档里面元素个数

select JSON_LENGTH(@d)
-- 结果2(id,name)

JSON_CONTAINS_PATH

查询json路径,如果有返回1,如果没有返回0

select JSON_CONTAINS_PATH(content,'one','$.name','$.id') from json_demo where id=1;
select JSON_CONTAINS_PATH(content,'one','$.nasdasme','$.id') from json_demo where id=1;
select JSON_CONTAINS_PATH(content,'all','$.name','$.id') from json_demo where id=1;
select JSON_CONTAINS_PATH(content,'all','$.nasdasme','$.id') from json_demo where id=1;

JSON_CONTAINS

查询包含值,存在返回1,没有返回0(精确匹配)

select JSON_CONTAINS(content,'1') from json_demo where id=1;
select JSON_CONTAINS(content,'{"attr":"red"}') from json_demo where id=1;

JSON_UNQUOTE和->>

查询的json指定值,并去掉引号

-- 去掉引号
SELECT JSON_UNQUOTE(content->"$.name") from json_demo where id=1;
SELECT content->>'$.name' from json_demo where id=1;
SELECT content->'$.name' from json_demo where id=1;
-- 结果 tx tx "tx"

JSON_SEARCH

按给定字符串关键字搜索json,返回匹配的路径

-- 查询json路径
update json_demo set content=JSON_INSERT(content, '$.color','red') where id=1;
SELECT JSON_SEARCH(content, 'one', 'red') from json_demo;
SELECT JSON_SEARCH(content, 'all', 'red') from json_demo;
-- 结果 "$.attr" ["$.attr", "$.color"]

三、数据演示

TRUNCATE table json_demo;
-- 创建json对象
insert into json_demo(content) values(JSON_OBJECT('id',1,'name','tangxiang'));
select * from json_demo;

-- 创建json数组
insert into json_demo(content) values(JSON_ARRAY(1,2,3,4));
select * from json_demo;

-- json数组新增元素,下标位置是1的地方插入x,其他元素往后移
update json_demo set content=JSON_ARRAY_INSERT(content, '$[1]', 'x') where id=2;
select * from json_demo;

-- 在下标为2的位置上,将元素变为数组,将x添加到后面
update json_demo set content=JSON_ARRAY_APPEND(content, '$[2]', 'x') where id=2;
select * from json_demo;

-- 将name属性由字符串变为数组,将x添加到后面
update json_demo set content=JSON_ARRAY_APPEND(content, '$.name', 'x') where id=1;
select * from json_demo;

-- 修改name值,增加attrjson属性
update json_demo set content=JSON_SET(content, '$.name', 'tx','$.attr','red') where id=1;
select * from json_demo;

-- 新增属性值,尝试更改name,JSON_INSERT不会修改旧的数据
update json_demo set content=JSON_INSERT(content, '$.descri', 'this is desc', '$.needdel', 'del', 'name','zhangsan') where id=1;
select * from json_demo;

-- JSON_REPLACE修改属性值
update json_demo set content=JSON_REPLACE(content, '$.needdel', 'no_del') where id=1;
select * from json_demo;

-- 移除needdel属性
update json_demo set content=JSON_REMOVE(content, '$.needdel') where id=1;
select * from json_demo;

-- 查询json的name属性
select JSON_EXTRACT(content,'$.name' ) from json_demo where id=1;
-- 或者这种写法,简洁形式
select content->'$.name' from json_demo where id=1;

-- 查询数组的下标1号位
select JSON_EXTRACT(content,'$[1]' ) from json_demo where id=2;

-- jsonobject返回属性个数,数组返回数组个数
select JSON_LENGTH(content) from json_demo;

-- 判断路径是否存在
select JSON_CONTAINS_PATH(content,'one','$.name','$.id') from json_demo where id=1;
select JSON_CONTAINS_PATH(content,'one','$.nasdasme','$.id') from json_demo where id=1;
select JSON_CONTAINS_PATH(content,'all','$.name','$.id') from json_demo where id=1;
select JSON_CONTAINS_PATH(content,'all','$.nasdasme','$.id') from json_demo where id=1;
select JSON_CONTAINS_PATH(content,'one','$[0]') from json_demo where id=2;

-- 判断文档内容是否存在
select JSON_CONTAINS(content,'1') from json_demo where id=1;
select JSON_CONTAINS(content,'{"attr":"red"}') from json_demo where id=1;

-- 去掉引号
SELECT JSON_UNQUOTE(content->"$.name") from json_demo where id=1;
SELECT content->>'$.name' from json_demo where id=1;
SELECT content->'$.name' from json_demo where id=1;

-- 查询json路径
update json_demo set content=JSON_INSERT(content, '$.color','red') where id=1;
SELECT JSON_SEARCH(content, 'one', 'red') from json_demo;
SELECT JSON_SEARCH(content, 'all', 'red') from json_demo;

四、官方文档下载

mysql json文档下载:

https://download.csdn.net/download/Ellen_Tangxiang/12670018

你可能感兴趣的:(培训,mysql,mysql,数据库)