MySQL的Json类型个人用法详解

前言

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

查询

1. 查询普通键

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

csharp 复制代码
select json_extract(price, "$.price") as de from goods where id = 159540
2. 查询字符串类型的数字键

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

csharp 复制代码
select json_extract(price, "$.sku."45453".algorithm") as de from price where id = 159540
3. 查询数组类的Json指定值

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

csharp 复制代码
select JSON_EXTRACT(`crumbs`, $[1]) as one_crumbs from comment where id = 4565
csharp 复制代码
select * from comment where JSON_EXTRACT(`crumbs` ,'$[1]') = 256
4. 查询Json里是否包含某个值
csharp 复制代码
select * from goods_item where goods_id=10263 and JSON_CONTAINS(item_value->'$', concat(43318,''));
csharp 复制代码
select * from goods_item where goods_id=10263 and JSON_CONTAINS(item_value, concat(43318,''));
csharp 复制代码
select * from goods_item where goods_id=10263 and JSON_CONTAINS(item_value, concat(43318,''),'$');
5. 查询Json长度

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

csharp 复制代码
select id, stock_no, goods_img from goods_item where state = 1 and JSON_LENGTH(goods_img) < 3

更新

1. 修改Json字段下指定键的值
bash 复制代码
update price set price = json_set(price, "$.attr."1280".price_old", 300) where id in (171314)
相关推荐
玄斎19 小时前
MySQL 单表操作通关指南:建库 / 建表 / 插入 / 增删改查
运维·服务器·数据库·学习·程序人生·mysql·oracle
编程小Y20 小时前
MySQL 与 MCP 集成全解析(核心原理 + 实战步骤 + 应用场景)
数据库·mysql·adb
lvbinemail20 小时前
Grafana模板自动复制图表
数据库·mysql·zabbix·grafana·监控
weixin_4481199421 小时前
Datawhale Hello-Agents入门篇202512第1次作业
数据库·sql·mysql
皮皮林55121 小时前
有了开源的 MySQL,为什么还要选择 PostgreSQL?
mysql
廋到被风吹走1 天前
【数据库】【MySQL】分库分表策略 分类、优势与短板
数据库·mysql·分类
五阿哥永琪1 天前
MySQL 慢查询定位与 SQL 性能优化实战指南
sql·mysql·性能优化
xiaok1 天前
GROUP BY进阶用法
mysql
李慕婉学姐1 天前
【开题答辩过程】以《基于Android的健康助手APP的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
android·java·mysql
qq_12498707531 天前
基于springboot健康养老APP的设计与实现(源码+论文+部署+安装)
java·spring boot·后端·mysql·微信小程序·毕业设计