MySQL之Json类型
来源:SegmentFault
2023-01-14 13:28:35
0浏览
收藏
在IT行业这个发展更新速度很快的行业,只有不停止的学习,才不会被行业所淘汰。如果你是数据库学习者,那么本文《MySQL之Json类型》就很适合你!本篇内容主要包括MySQL之Json类型,希望对大家的知识积累有所帮助,助力实战开发!
1 Json 类型简介
MySQL 5.7 之后提供了Json类型,是MySQL 结合结构化存储和非结构化存储设计出来的一个类型。
在某些场景下,Json 类型简直是福音。
场景1: 用户画像,描述用户的标签等类似场景,比如互联网医院类系统的患者健康档案,有很多信息不是必填项,如:身高、体重、三围等等信息,可以使用 Json 存储。
场景2: 游戏类场景;
场景3: 存储图片等附属信息,比如图片的分辨率,图片标题等。
2 让我们看看Json怎么用的
创建表,并插入数据
CREATE TABLE UserLogin (
userId BIGINT NOT NULL,
loginInfo JSON,
PRIMARY KEY(userId)
);
INSERT INTO `UserLogin`(`userId`, `loginInfo`) VALUES (1, '{\"QQ\": \"82946772\", \"wxchat\": \"破产码农\", \"cellphone\": \"13918888888\"}');
INSERT INTO `UserLogin`(`userId`, `loginInfo`) VALUES (2, '{\"cellphone\": \"15026888888\"}');
INSERT INTO `UserLogin`(`userId`, `loginInfo`) VALUES (3, '{\"QQ\": \"82946772\", \"wxchat\": \"破产码农\", \"cellphone\": \"13918888889\"}');2.1 JSON_EXTRACT 函数,获取Json字段中特定属性的值
SELECT JSON_UNQUOTE(JSON_EXTRACT(loginInfo, "$.cellphone")) from UserLogin;
获取cellphone属性的值。可以使用->写法或者->>写法。
-- 带引号 SELECT loginInfo->"$.cellphone" from UserLogin; -- 不带引号 SELECT loginInfo->>"$.cellphone" from UserLogin;
函数说明:
SELECT * from UserLogin where JSON_CONTAINS(loginInfo, '"13918888888"', '$.cellphone')
说明:使用
-- 增加虚拟列-cellphone,值通过loginInfo计算而来 alter table UserLogin add COLUMN cellphone varchar(50) as (loginInfo->>"$.cellphone"); -- 给cellphone 这一列增加唯一索引 alter table UserLogin add unique index idex_cellphone(cellphone);
可以看到的确使用了该索引进行查询

2.4 JSON_CONTAINS_PATH 判断Json中是否有对应字段
所有记录中有多少记录包含wxchat字段
SELECT count(*), JSON_CONTAINS_PATH(loginInfo, 'one', '$.wxchat') cp FROM UserLogin GROUP BY cp
返回

说明,包含wxchat字段有两条记录,不包含的有一条记录。
2.5 JSON_PRETTY 让Json长的更好看
SELECT JSON_PRETTY(loginInfo) from UserLogin
可以返回格式化的json数据
{
"QQ": "82946772",
"wxchat": "破产码农",
"cellphone": "13918888888"
}2.6 JSON_STORAGE_SIZE返回二进制表示的字节数
返回loginInfo字段中存储的二进制表示的字节数。
SELECT max(JSON_STORAGE_SIZE(loginInfo)) FROM UserLogin; SELECT avg(JSON_STORAGE_SIZE(loginInfo)) FROM UserLogin; SELECT min(JSON_STORAGE_SIZE(loginInfo)) FROM UserLogin;
2.7 其他函数
- JSON_OBJECT 计算键值对列表并返回包含这些键值对的JSON对象,使用JSON_OBJECT。
- JSON_OBJECTAGG 接受两个列名或表达式,并返回一个包含JSON_OBJECTAGG键值对的JSON对象。
- JSON_ARRAY 计算一个值列表,并使用JSON_ARRAY返回包含这些值的JSON数组。
- JSON_ARRAYAGG 将结果集聚合为单个JSON数组,其元素由带有JSON_ARRAYAGG的行组成。
- JSON_TABLE 从JSON文档中提取数据,并将其作为具有JSON_TABLE指定列的关系表返回。
总结
JSON 类型是 MySQL 5.7 版本新增的数据类型,用好 JSON 数据类型可以有效解决很多业务中实际问题。最后,我总结下今天的重点内容: 使用 JSON 数据类型,推荐用 MySQL 8.0.17 以上的版本,性能更好,同时也支持 Multi-Valued Indexes;
- JSON 数据类型的好处是无须预先定义列,数据本身就具有很好的描述性;
- 不要将有明显关系型的数据用 JSON 存储,如用户余额、用户姓名、用户身份证等,这些都是每个用户必须包含的数据;
- JSON 数据类型推荐使用在不经常更新的静态数据存储。
参考:
1、30 mins with MySQL JSON functions:https://dasini.net/blog/2018/...
2、拉钩教育《姜承尧的MySQL实战宝典》-04 | 非结构存储:用好 JSON 这张牌:https://kaiwu.lagou.com/cours...
文中关于mysql的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《MySQL之Json类型》文章吧,也可关注golang学习网公众号了解相关技术文章。
版本声明
本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
评论列表
-
- 怕黑的蜗牛
- 这篇技术贴真是及时雨啊,太细致了,很有用,mark,关注博主了!希望博主能多写数据库相关的文章。
- 2023-01-21 16:20:57
查看更多
最新文章
-
- 数据库 · MySQL | 3天前 | MySQL · 慢查询 · 索引优化 · COUNT查询 · 汇总表 · 联合索引 覆盖索引 汇总表 MySQL COUNT慢 COUNT(*)优化
- MySQL COUNT(*) 总数查询变慢怎么办:从扫描行数到汇总表的完整治理流程
- 329浏览 收藏
查看更多
课程推荐
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
查看更多
AI推荐
-
- ljg-skills
- ljg-skills 是李继刚开源的 AI 技能与提示词集合,面向大模型使用者整理了一批可复用的 prompt、角色设定和任务技能模板,适合用于学习提示词设计、搭建个人 AI 工作流和沉淀团队常用智能体能力。
- 648次使用
-
- MELO音乐
- MELO音乐是一站式AI视频与音乐制作助手,对标suno, udio的高品质体验。提供伴奏生成、原创写词、无损导出、哼唱识曲、混音变声等全套音频与短视频编辑工具。无论是流行Kpop、电音说唱、民谣古风、摇滚儿歌还是商用轻音乐,MELO为你免费谱曲,轻松做同款!
- 670次使用
-
- UniScribe
- UniScribe 是一款 AI 音视频转文字与内容整理工具,支持上传音频、视频文件或粘贴 YouTube 链接,自动生成转写文本、摘要、思维导图和关键问题,并支持多格式导出,适合会议记录、课程学习、访谈整理和内容创作复盘。
- 629次使用
-
- 剧云
- 剧云是专业中文剧本创作平台,安全稳定运行十余年,集成AI编剧、剧本医生审核、人物小传、剧情关系图、大纲编写、多人协作、Word导入导出、版权管控功能,数据安全防护,轻松高效创作剧本。
- 798次使用
-
- 万象有声
- 万象有声,一个专为有声创作者打造的新一代智能有声内容创作平台。平台提供专业的智能拆章、智能画本编辑、AI配音、AI生成音效、后期制作、智能对轨、智能审听等有声创作全流程工具,可以帮助创作者高效、低成本创作出引人入胜的有声作品。立即体验,让有声书制作更简单!
- 782次使用
查看更多
相关文章
-
- golang MySQL实现对数据库表存储获取操作示例
- 2022-12-22 499浏览
-
- 搞一个自娱自乐的博客(二) 架构搭建
- 2023-02-16 244浏览
-
- B-Tree、B+Tree以及B-link Tree
- 2023-01-19 235浏览
-
- mysql面试题
- 2023-01-17 157浏览
-
- MySQL数据表简单查询
- 2023-01-10 101浏览

mysql简介
