当前位置:网站首页>MySQL_关于JSON数据的查询
MySQL_关于JSON数据的查询
2022-07-30 20:14:00 【bluepad】
MySQL中关于JSON类型数据的查询
导语
MySQL从5.7版本开始支持JSON格式的数据类型,JSON格式的字符串类型有如下优势:
1、存储在JSON列中的JSON文档会被自动验证。
无效的文档会产生错误;
2、最佳存储格式。
存储在JSON列中的JSON文档会被转换为允许快速读取文档元素的内部格式。
JSON格式的数据
{
"classInfo": [
{
"level": 1,
"classId": 1472869278473637889,
"parentId": 0,
"typeGroups": 1472869277552140288
},
{
"level": 2,
"classId": 1472869580589355009,
"parentId": 1472869278473637889,
"typeGroups": 1472869580531884032
},
{
"level": 3,
"classId": 1472869739033382914,
"parentId": 1472869580589355009,
"typeGroups": 1472869738959134720
},
{
"level": 4,
"classId": 1472875592394231810,
"parentId": 1472869739033382914,
"typeGroups": 1472875591372201984
}
],
"classValueInfo": {
"specs": [],
"basics": [
{
"valueIds": [],
"basicsType": "model",
"typeGroups": []
},
{
"valueIds": [
1470582565747314690
],
"basicsType": "内部品牌",
"typeGroups": [
1470582565592760320
]
},
{
"valueIds": [],
"basicsType": "适用品牌",
"typeGroups": []
}
],
"skuSpecs": [
{
"id": null,
"price": 100,
"skuCode": "1473137918587781120",
"upcCode": "1",
"inventory": 10,
"skuSpecInfos": [],
"thirdpartySkuCode": "1"
}
],
"attributes": [
{
"type": "重要属性",
"value": "1",
"typeGroups": 1470588912652648448,
"attributeId": 1470588912693956611,
"valueIdList": []
},
{
"type": "重要属性",
"value": "",
"typeGroups": 1470589592058593280,
"attributeId": 1470589592070541314,
"valueIdList": [
{
"valueId": 1470603255703789569,
"valueIdTypeGroups": 1470602701724946432
}
]
}
]
}
}
表信息
CREATE TABLE `product` (
`id` bigint NOT NULL,
`site_code` varchar(16) COLLATE utf8mb4_general_ci NOT NULL COMMENT '站点代码',
`product_code` varchar(50) COLLATE utf8mb4_general_ci NOT NULL COMMENT 'SPU代码',
`product_features` longtext COLLATE utf8mb4_general_ci COMMENT 'SPU 商品特征',
`product_m_describe` longtext COLLATE utf8mb4_general_ci COMMENT 'SPU M端描述',
`product_pc_describe` longtext COLLATE utf8mb4_general_ci COMMENT 'SPU PC端描述',
`product_class` json NOT NULL COMMENT '冗余的商品分类信息',
`spec_type` tinyint NOT NULL COMMENT '规格类型 1=单规格 2=多规格',
`url` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '自定义Url',
`up_time` datetime DEFAULT NULL COMMENT '上架时间',
`down_time` datetime DEFAULT NULL COMMENT '下架时间',
`sort` int NOT NULL DEFAULT '0' COMMENT '排序',
`del_flag` tinyint NOT NULL DEFAULT '1' COMMENT '是否删除 0=删除,1=正常',
`create_by` varchar(64) COLLATE utf8mb4_general_ci NOT NULL,
`create_time` datetime NOT NULL,
`update_by` varchar(64) COLLATE utf8mb4_general_ci NOT NULL,
`update_time` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='商品分类'
表结构不是重点,终点是存在JSON数据类型的字段,将JSON格式数据粘贴到对应的字段中即可,上面的表结构中product_class为Json数据类型的字段
开始查询
SQL语句
SELECT * FROM product WHERE del_flag=1
AND (JSON_CONTAINS(product_class>'$.classInfo',JSON_OBJECT('classId',1470584780293689347))
AND JSON_CONTAINS(product_class->'$.classInfo',JSON_OBJECT('classId', 1470585059726610434))
AND JSON_CONTAINS(product_class->'$.classInfo',JSON_OBJECT('classId', 1470592051933470721)))
查询结果
个人理解-关于SQL
JSON_CONTAINS(product_class->'$.classInfo',JSON_OBJECT('classId', 1470584780293689347))
官方文档中的解释
JSON_CONTAINS():JSON 文档是否包含路径中的特定对象
->:评估路径后从 JSON 列返回值;相当于 JSON_EXTRACT()。
JSON_OBJECT():创建 JSON 对象
SQL中包含的product_class是对应JSON格式的字段名,$.classInfo对应的是JSON数据中需要查询的列表,classId具体数据中的值
如果classInfo中包含有列表,name在查询的数据中classInfo的写法就要改变,继续"."下去,
例如:
'$.classInfo.A'
这里需要一直"."到你需要查询的那一级
结语
MySQL中关于JSON数据类型查询的方法当然不至这一种,有兴趣的可以具体去官网查看,
官网链接:MySQL官网-JSON函数参考
以上是个人理解,如果有不对的地方,希望博友指出
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
- Cesium loads offline maps and offline terrain
- MySQL mass production of data
- 推荐系统:评估指标【离线评估指标:RMSE(均方根误差)、AUC、准确率、召回率、F1】【在线评估:A/B测试】【一般要求响应时间<0.5s】
- MySQL大批量造数据
- Ordinary int main(){} does not write return 0; what will happen?
- 如何优化OpenSumi终端性能?
- el-input 只能输入整数(包括正数、负数、0)或者只能输入整数(包括正数、负数、0)和小数
- MySQL performance optimization (hardware, system configuration, table structure, SQL statements)
- 线性结构:顺序表和链表
- Linux下安装MySQL教程
猜你喜欢
MySQL数据库主从配置
Database Tuning - Database Tuning
MySQL六脉神剑,SQL通关大总结
【考研词汇训练营】Day18 —— amount,max,consider,account,actual,eliminate,letter,significant,embarrass,collapse
MySQL函数(经典收藏)
Install Mysql5.7 under Linux, super detailed and complete tutorial, and cloud mysql connection
HMS Core Discovery第16期回顾|与虎墩一起,玩转AI新“声”态
Typora设置标题自动标号
MySQL six-pulse sword, SQL customs clearance summary
Download and installation of the latest version of MySQL 8.0 under Linux (detailed steps)
随机推荐
MySQL database --- Addition, deletion, modification and query of MySQL tables (advanced)
Install Mysql5.7 under Linux, super detailed and complete tutorial, and cloud mysql connection
DCM 中间件家族迎来新成员
excel数字下拉递增怎么设置?
用jOOQ 3.17投射类型安全的嵌套表记录
PHP低代码开发引擎—表单设计
Cesium loads offline maps and offline terrain
服务器不稳定因素
HMS Core音频编辑服务音源分离与空间音频渲染,助力快速进入3D音频的世界
移动web开发01
Linux download and install mysql5.7 version tutorial the most complete and detailed explanation
利用go制作微信机器人
Common Expression Recognition Based on Face (1) - Basic Knowledge of Deep Learning
多线程的互斥锁应用RAII机制
MySQL大批量造数据
Ordinary int main(){} does not write return 0; what will happen?
[NISACTF 2022]下
el-input can only input integers (including positive numbers, negative numbers, 0) or only integers (including positive numbers, negative numbers, 0) and decimals
英文字母间隔突然增大(全角与半角转换)
Maxwell 一款简单易上手的实时抓取Mysql数据的软件