首页 > Web开发 > 详细

json数据的增删改查

时间:2020-08-10 19:47:19      阅读:94      评论:0      收藏:0      [点我收藏+]

创建一个表class

DROP TABLE IF EXISTS `class`;

CREATE TABLE `class` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(20) NOT NULL COMMENT ‘用户名‘,
`desc` json NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic COMMENT ‘班级表‘;

1插入:

1.1    insert into class(`id` ,`name`,`desc`) values (1 ,‘jimao‘,‘{"sex":"1","high":"183","work":"programmer"}‘)

技术分享图片

 

 1.2可以使用JSON_OBJECT()函数构造json对象

INSERT INTO class(`name`,`desc`) VALUES(‘liming‘, JSON_OBJECT("sex", 0, "age", 17));

技术分享图片

 

 1.3使用JSON_ARRAY()函数构造json数组

 

 INSERT INTO class(`name`,`desc`) VALUES(‘guozihao‘, JSON_OBJECT("sex", 1, "age", 25, "tag", JSON_ARRAY(3,5,90)));技术分享图片

 

2查询

2.1查询所有数据

select * from class

技术分享图片

 

2.2查询json中的单个值

这是发现desc是关键字,所以重新删掉建新表

DROP TABLE IF EXISTS `class`;

CREATE TABLE `class` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(20) NOT NULL COMMENT ‘用户名‘,
`detail` json NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic COMMENT ‘班级表‘;

insert into class(`id` ,`name`,`detail`) values (1 ,‘jimao‘,‘{"sex":"1","high":"183","work":"programmer"}‘);

INSERT INTO class(`name`,`detail`) VALUES(‘liming‘, JSON_OBJECT("sex", 0, "age", 17));

INSERT INTO class(`name`,`detail`) VALUES(‘guozihao‘, JSON_OBJECT("sex", 1, "age", 25, "tag", JSON_ARRAY(3,5,90)));

SELECT *  FROM class

技术分享图片

 

 

 

SELECT  JSON_EXTRACT(detail, ‘$.age‘), JSON_EXTRACT(detail, ‘$.sex‘), JSON_EXTRACT(detail, ‘$.tag[0]‘)from  class

技术分享图片

 

 等同于select name, detail->‘$.age‘, detail->‘$.sex‘, detail->‘$.tag[0]‘ from class;

 技术分享图片

 

 

2.3 查询结果去掉双引号

可以用JSON_UNQUOTE函数将双引号去掉

select name, JSON_UNQUOTE(detail->‘$.sex‘) from class

技术分享图片

 

 或者用->>来取引号中的值

select name, detail->>‘$.sex‘ from class ;

 技术分享图片

 

按照json中字段的属性关联查询,注意sex的值带引号和不带引号是两种值

 

可以对仪表新增虚拟列

ALTER TABLE `class` ADD `sex` VARCHAR(50) GENERATED ALWAYS AS (detail->>‘$.sex‘) VIRTUAL

技术分享图片

 

 然后用select name,sex FROM class where sex=‘1‘; 查询出对应的结果

技术分享图片

 

 3更新

3.1JSON_INSERT()插入新值,但是不会覆盖已经存在的值

更新前的页面

技术分享图片

 

 更新后的页面

技术分享图片

 

 更新语句

UPDATE class SET detail = JSON_INSERT(detail,‘$.age‘,35, ‘$.sex‘,‘1‘,‘$.high‘, ‘179‘,‘$.money‘,‘1800‘) where id=1;

 3.2JSON_SET()插入新值,并覆盖已经存在的值

更新前的表

技术分享图片

更新后的表

技术分享图片

 

 更新语句

 

 UPDATE class SET detail = JSON_SET(detail,‘$.sex‘,‘2‘,‘$.paymoney2‘, ‘900‘) where id=2;

3.3JSON_REPLACE:只替换存在的值

更改前

技术分享图片

 

 更改后

技术分享图片

 

sql:UPDATE class SET detail = JSON_REPLACE(detail, ‘$.sex‘, 9, ‘$.tag‘, ‘[1,2,3]‘) where id=3;

 4删除

移除json中的某个元素

删除前的表

技术分享图片

 

 删除后的表

技术分享图片

 

 sql:

UPDATE class SET detail  = JSON_REMOVE(detail, ‘$.paymoney‘, ‘$.paymoney2‘) where id=2;

 

json数据的增删改查

原文:https://www.cnblogs.com/zhushilai/p/13471495.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!