【MySQL】 json类型的增删改查

458 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第27天,点击查看活动详情

json是一种特殊字符串,轻量级的数据格式,不程序不同语言数据交换格式。
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript(欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
mysql 从5.7开始增加了json新的数据类型,此类型非常灵活。

目录

json对象的操作

 json类型数组的操作:


json对象的操作

首先建一个有json类型的表

create table db1.t5(
    id int not null auto_increment primary key ,
    obj json
)engine=innodb default charset =utf8 auto_increment=202202;

这里我们可以看到obj字段的类型是json

-- json_object返回一个对象 json中{}大括号也是对象的意思 两种方式都行 注意两种方式存对象的具体写法
insert into db1.t5 values (null,json_object('name','张三','gender','男','age',18));
insert into db1.t5 value (null,json_object('name','李四','gender','男','age',21));
insert into db1.t5 value (null,json_object('name','王五','gender','女','age',21));
insert into db1.t5 value (null,'{"name":"马六","gender":"女","age":22}');
insert into db1.t5 value (null,'{"name":"赵七","gender":"女","age":18}');
insert into db1.t5 value (null,'{"name":"周八","gender":"男","age":22}');

看看存入数据库里的内容

​编辑

存好了json对象接下来开始查询


-- json_extract(字段名,'$.属性名')查询
-- 这种方式显示出来有双引号
-- 拉姆达表达式中obj->'$.name'显示的为有双引号,obj->>'$.name'显示的没有
select json_extract(obj,'$.name','$.age') from db1.t5;
-- 查询年龄为22的人
-- 方式一
select * from db1.t5 where json_extract(obj,'$.age')=22;
-- 方式二 拉姆达表达式
select * from db1.t5 where obj->'$.age'=21;

效果:

​编辑

 按年龄查询效果:

​编辑

json_set(对象名,'$.属性名','值') 用于修改或插入属性值

-- json_set(对象名,'$.属性名','值') 用于修改或插入属性值
update  db1.t5 set obj= (json_set(obj,'$.name','卸甲','$.age',18,'$.address','中国')) where id=202205;

效果如下:

​编辑

 json_remove(字段名,'$.属性')  用于删除属性

-- json_remove(字段名,'$.属性') 用于删除属性
update db1.t5 set obj=(json_remove(obj,'$.gender'))where id=202205;

效果如下:

​编辑

 json类型数组的操作:

新建一个表:

create table db1.t6(
                       id int not null auto_increment primary key ,
                       arr json
)engine=innodb default charset =utf8 auto_increment=20220201;

插入数据并查询:

insert into db1.t6 value (null,json_object('name','陈卸甲','myarr',json_array(10,'java',100,200)));
select * from db1.t6;
-- 数组索引从0开始
select arr->>'$.myarr[1]',arr->>'$.name' from db1.t6 where id=20220201;

效果如下:

​编辑

 其他的增删改查跟上面的一样