mysql处理json 比用like好 MySQL对JSON数据的增删改查

mysql官方文档:https://dev.mysql.com/doc/refman/8.0/en/json.html

建库建表增删改查

#删库
drop database RUNOOB;

#建库
CREATE DATABASE IF NOT EXISTS RUNOOB DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

#建表
CREATE TABLE `test` (
`id` INT PRIMARY KEY AUTO_INCREMENT,
`info` JSON
);





#增---------------------------
#key:value
INSERT INTO test(info) VALUES ('{"name":"chenhao"}');
#数组
INSERT INTO test(info) VALUES ('{"name":"Bill","Array":[1,2]}');




#改---------------------------
#全部覆盖
update gioet_instance set properties='{"name": "chentianle"}';
#改某个value
update test set info=json_set(info,"$.name","admin")
#删除JSON中多个key:value,数组等 其它不变
UPDATE test SET info = JSON_REMOVE(info, '$.name', '$.Array');





#查:重点---------------------------
#取出value 双>>去掉引号
select info->>'$.name', info->'$.Array[0]' from test;
#同上
select JSON_UNQUOTE(info->'$.name'), info->'$.Array[0]' from test;
#同上,取出value
select JSON_UNQUOTE(JSON_EXTRACT(info,'$.name')) from test;
#查含有key:value
select * from test where JSON_CONTAINS(info, JSON_OBJECT("name", "Bill"));





#删 JSON中key为name和Array,其它不变--------------------------
UPDATE test SET info = JSON_REMOVE(info, '$.name', '$.Array');
  • 其它示例应用

#获取区域范围内所有客户管理员 
SELECT bu.* FROM gioet_instance AS p 
inner join blade_user as bu on bu.tenant_id=p.tenant_id and bu.real_name=JSON_UNQUOTE(JSON_EXTRACT(p.properties,'$.contact'))
WHERE p.category_id in(1,2) AND      (      JSON_UNQUOTE(JSON_EXTRACT(p.properties,'$.province')) IN ('1','2') or        JSON_UNQUOTE(JSON_EXTRACT(p.properties,'$.city')) IN ('1','2') or      JSON_UNQUOTE(JSON_EXTRACT(p.properties,'$.district')) IN ('1','2') or      JSON_UNQUOTE(JSON_EXTRACT(p.properties,'$.address')) IN ('1','2')    )


#更改地区中地区及管理员
update gioet_instance set 
properties='{"id": 10, "lat": "1", "lng": "1", "city": "1","contact": "admin", "memo": "", "district": "1", "province": "1", "entity_id": 10}'
where id=10;

 

 

#创建json对象 JSON_OBJECT("gatewayId", "20200001")
#判断properties是否包含某个josn    JSON_CONTAINS(properties, JSON_OBJECT("gatewayId", "20200001")) 
#提取json值 SELECT JSON_EXTRACT (字段名, '$.属性名')     示例select JSON_EXTRACT(properties,'$.gatewayId') from tb_iot where  cat_id=2 and pid=8032;
#提取json数组  SELECT JSON_EXTRACT (字段名, '$[0].属性名') 

 

 
select * from gioet_instance where JSON_CONTAINS(properties, JSON_OBJECT("gatewayId", "20200001"));

 

参考:

https://blog.csdn.net/qq_21187515/article/details/90760337

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小黄人软件

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值