Mysql对存储JSON数据的查询和修改

 # 创建表 product 添加数据
insert into product (name,details) values ("华为",'{"cpu":"骁龙865","system":"android","storage":"256G"}')
insert into product (name,details) values ("华为",'{"cpu":"骁龙865","system":"android","storage":["256G","64G","128G"]}')
select *,JSON_EXTRACT(details,'$.cpu') as cpu from product where JSON_EXTRACT(details,'$.cpu') = "骁龙865"
# 查询C 的所有数据  [3,4,5]
select JSON_EXTRACT('{"a":1, "b":2,"c":[3,4,5]}','$.c[*]') ;  

// mysql 8 应该可以用 
# 查询 C 索引第一个到第二个
select JSON_EXTRACT('{"a":1, "b":2,"c":[3,4,5]}','$.c[1 to 2]') ;  

select JSON_EXTRACT('{"a":1, "b":2,"c":[3,4,5]}','$.c[last - 1]') ;  

select *,JSON_EXTRACT(details,'$.cpu') as cpu from product
# 简写方式
select details ->'$.cpu' from product

# JSON_UNQUOTE 去掉引号
select JSON_UNQUOTE(details ->'$.cpu') from product
# 简写方式
select details ->> '$.cpu' from product

# 查询 system 为 Android 的数据
# JSON_CONTAINS JSON数据包含
select * from product where JSON_CONTAINS(details,JSON_OBJECT('system','android'));

# 查询 details的 json 数据中是否有 cpu key值 可写多个
# one 表示 有一个就返回  all 表示 所有满足才返回
select * from product where JSON_CONTAINS_PATH(details,'one','$.cpu') 
select * from product where JSON_CONTAINS_PATH(details,'one','$.cpu','$.storage') 

# JSON_SEARCH 搜索
select details,JSON_SEARCH(details,'one','64G') from product

SELECT GROUP_CONCAT(name),price FROM product GROUP BY price;
SELECT JSON_ARRAYAGG(name),price FROM product GROUP BY price;

# 重新JSON数据的所有key
select JSON_KEYS(details) from product;

# 重新json数据有多少个key
select JSON_LENGTH(details) from product;

# 通过json_set函数,来修改data字段的值
update tab_json set data = json_set(data,"$.address","Shenzhen");
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值