mysql json增删改查_json数据的增删改查

创建一个表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"}')

10e58f483ed750149329d76ceb909857.png

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

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

98c1adaff87916d10c7582682c30c38b.png

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

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

adb594afbf501d362132d70303b08b95.png

2查询

2.1查询所有数据

select * from class

f9552e13b1cabf93e0b7a02f874b4029.png

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

47ec9d3c4213d2f5d0ae7bf66d1361b1.png

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

6bf29e7486abf64dd9a54cb54d79400c.png

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

92da086e5bc640523108ec7bb21bcd6c.png

2.3 查询结果去掉双引号

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

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

2cc5818111c008a3cbcf41b2a8323e6c.png

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

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

0722aa1d440c13468422ac2d47f61bea.png

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

select name, detail->>'$.age' from class where detail->'$.age'=28

3337656907cf169792817f555a2af26b.png

4e71c65af739d3f6529710bdc405f9eb.png

可以对仪表新增虚拟列

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

e51a6299ffe7c946e5faee51c92e5b7c.png

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

1f50f2e5c338d2237969d359a022e0bc.png

3更新

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

更新前的页面

eccac3bfd47bf9e3bc27fb2cc085feb4.png

更新后的页面

7389bf153fcbeb441e8fef556d8ae092.png

更新语句

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

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

更新前的表

581e46b3d9f92d8c6332b45f39d0d2f0.png

更新后的表

17716e69aff33a138400127cdaf4ae49.png

更新语句

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

3.3JSON_REPLACE:只替换存在的值

更改前

b2ce752471c824eea06e4e65e41005c1.png

更改后

baf668800bc59de9c881854658db5e4e.png

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

4删除

移除json中的某个元素

删除前的表

cfad007f49ae0568a785564bc6aa6194.png

删除后的表

c7b9c81a0026f018195818e36e88d8e5.png

sql:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值