当前位置: 首页 > news >正文

MySQL的Json类型个人用法详解

前言

虽然MySQL很早就添加了Json类型,但是在业务开发过程中还是很少设计带这种类型的表。少不代表没有,当真正要对Json类型进行特定查询,修改,插入和优化等操作时,却感觉一下子想不起那些函数怎么使用。比如把json里的某个键和值作为SQL条件,修改某个键下的子键的值,其中可能会遇到数组形式的Json或者键名是字符串的数字修改异常等问题。那么,以下是小北在业务中常遇到的Json类型操作汇总了。

查询

1. 查询普通键

以下示例是从goods表的price字段里取出price键的值,可以依次往下取值,就是price.嵌套键名即可。

select json_extract(price, "$.price") as de from goods where id = 159540

2. 查询字符串类型的数字键

虽然以上能解决大部分取值,但有时候的json嵌套里有字符串类型的数字键名,如下图的json,要取出字段下sku键名的 "45453"键algorithm的值。

select json_extract(price, "$.sku.\"45453\".algorithm") as de from price where id = 159540

3. 查询数组类的Json指定值

以上的两种是我们常见的对象类,但当出现数组类时,就没有键名了,取值只需要指定索引即可,如下分别是查询某值和根据json的某值作为查询条件。

select JSON_EXTRACT(`crumbs`, $[1]) as one_crumbs from comment where id = 4565
select * from comment where JSON_EXTRACT(`crumbs` ,'$[1]') = 256

4. 查询Json里是否包含某个值

select * from goods_item where goods_id=10263 and JSON_CONTAINS(item_value->'$', concat(43318,''));
select * from goods_item where goods_id=10263 and JSON_CONTAINS(item_value, concat(43318,''));
select * from goods_item where goods_id=10263 and JSON_CONTAINS(item_value, concat(43318,''),'$');

5. 查询Json长度

以下的goods_img是一个数组类的Json字段,通过长度作为SQL的查询条件。

select id, stock_no, goods_img from goods_item where state = 1 and JSON_LENGTH(goods_img) < 3

更新

1. 修改Json字段下指定键的值

update price set price = json_set(price, "$.attr.\"1280\".price_old", 300) where id in (171314)

http://www.lryc.cn/news/160664.html

相关文章:

  • VUE 程序的执行过程(非常非常重要)
  • 指定cv::cuda::GpuMat创建所在的GPU卡
  • Camunda 7.x 系列【43】事务子流程
  • vscode设置的json的配置(个人怕忘了做个记录,各位不用看)
  • HJ17 坐标移动
  • 【postgresql基础入门】 新建数据库服务集群目录,定制属于自己的独享数据区
  • 808协议是指中国国标GB/T 32960-2017《道路车辆运行数据远程监管与服务》通信协议,也被称为JT/T808协议
  • DDD 与 CQRS 才是黄金组合
  • 运维Shell脚本小试牛刀(八): case模式忽略命令行参数大小写演示
  • 【个人博客系统网站】项目的发布 · 通过公网IP访问我们的网站 · 思考总结
  • 网络类型(通信分类)
  • python基础语法(一)
  • C语言学习笔记——常见问题
  • 使用GPU虚拟化技术搭建支持3D设计的职校学生机房(云教室)
  • 【C++入门】C语言的不足之处
  • 【已解决】oracle获取最近2学年的数据
  • 【图卷积神经网络】1-入门篇:为什么使用图神经网络(下)
  • AIGC(生成式AI)试用 2 -- 胡言乱语
  • 爬虫逆向实战(30)-某查查股东关联公司(HmacSHA512)
  • 多态(个人学习笔记黑马学习)
  • 线程中future/atomic/async及nlohmann json的学习
  • windows安装MongoDB后进入命令交互界面失败解决方案
  • 基于Java+SpringBoot+Vue前后端分离高校专业实习管理系统设计和实现
  • E. Hanging Hearts
  • docker安装RabbitMQ教程
  • Java虚拟机整型数加载指令学习
  • Docker 实现 MySQL 一主一从配置
  • Python编程练习与解答 练习113:避免重复
  • 线上 udp 客户端请求服务端客户端句柄泄漏问题
  • 合宙Air724UG LuatOS-Air LVGL API控件-窗口 (Window)