当前位置:首页 > 技术分析 > 正文内容

MySQL_JSON格式存取_mysql操作json类型数据

ruisui883个月前 (02-08)技术分析11

昨天说了,今天单独拿一篇出来写一下JSON格式的读取。在很久很久以前,MySQL是没有JSON格式的,那个时候还很羡慕非关系型数据库,它们可以自由存储各种数据。MySQL从5.7版本开始就支持JSON格式的,从此也可以对外号称关系型数据和非关系型数据都通吃了。但是最开始对JSON格式数据的优化不是很优化,效率有点低。但这个问题他们自己也肯定知道的,先有再优嘛,于是8.0后MySQL对JSON格式的优化已经很好了,现在使用起来如果数据量不是特别特别大,使用效果还是很好的。


下面就主要介绍一下JSON格式的创建、插入、读取和修改,基本如果不是开发人员、数据库管理人员,作为一个数据分析师应该是够用了。


【创建】

可以使用SQL语句创建,如下,最后就创建了一个带JSON格式的表格↓

CREATE TABLE `salary` (
  `姓名` varchar(6) NOT NULL,
  `月份` varchar(3) NOT NULL,
  `工资` decimal(12,2) DEFAULT NULL,
  `个税` decimal(12,2) DEFAULT NULL,
  `其他费用` json DEFAULT NULL,
  PRIMARY KEY (`姓名`,`月份`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

当然也是可以通过Navicat直接创建就行了↓

【插入数据】

然后使用常规的INSERT INTO插入数据就行了,需要注意的是JSON格式使用键值对组成的,也可以内部嵌套数据,我们这里插入7条数据,SQL语句如下↓

INSERT INTO salary VALUES("李华","7月",2000,11,'{"chailv":333,"gaowen":222,"xiayu":11,"zhaodai":1200}');
INSERT INTO salary VALUES("李华","8月",2200,11,'{"chailv":335,"gaowen":225,"xiayu":45}');
INSERT INTO salary VALUES("韩梅梅","7月",4400,33,'{"chailv":158,"gaowen":222}');
INSERT INTO salary VALUES("韩梅梅","8月",5500,66,'{"chailv":456,"gaowen":222,"zhaodai":5000}');
INSERT INTO salary VALUES("张三三","7月",2000,11,'{"chailv":100,"gaowen":222}');
INSERT INTO salary VALUES("张三三","8月",3000,14,'{"chailv":200,"gaowen":222}');
INSERT INTO salary VALUES("张三三","10月",4000,51,'{"chailv":300,"gaowen":222,"qita":{"q1":111,"q2":222}}');

除了使用{}插入JSON格式数据,还可以使用JSON_OBJECT()函数转换成JSON格式的数据,下面再插入一条数据,SQL语句如下↓

INSERT INTO salary VALUES("李华","9月",2454,15,JSON_OBJECT("chailv",999,"zhaodai",1111));


【读取数据】

一般情况下数据分析就用这个查询功能就行了。json_extract()函数:从json中返回想要的字段,用法是,json_extract(字段名,$.json字段名)。也可以使用 json字段名->'$.json属性'进行查询,下面分别有两种查询方式进行演示,把其他费用里面的各项费用单独查询出来。

SELECT
 姓名,月份,工资,个税,
 JSON_EXTRACT(其他费用, '$.chailv') AS 差旅费,
 JSON_EXTRACT(其他费用, '$.gaowen') AS 高温费,
 其他费用->'$.xiayu' AS 下雨费,
 其他费用->'$.zhaodai' AS 招待费
FROM
 salary


JSON里面的字段也是可以作为条件进行查询的,比如我们要查询差旅费大于300的人员和月份,SQL预计如下↓

SELECT
 姓名,月份,工资,个税,
 JSON_EXTRACT(其他费用, '$.chailv') AS 差旅费
FROM
 salary
WHERE
 JSON_EXTRACT(其他费用, '$.chailv')>300


如果遇到JSON嵌套的情况,也是可以用两层JSON_EXTRACT函数进行查询的,比如张三三10月其他费用里面有个q1和q2两个费用,现在需要单独查询出来,SQL语句如下↓

SELECT
 姓名,月份,工资,个税,
 JSON_EXTRACT(JSON_EXTRACT(其他费用, '$.qita'),'$.q1') AS Q1费用,
 JSON_EXTRACT(JSON_EXTRACT(其他费用, '$.qita'),'$.q2') AS Q2费用
FROM
 salary


JSON_KEYS函数可以查询出JSON字段里面的键名字,SQL语句如下↓

SELECT
 姓名,月份,工资,个税,
 JSON_KEYS(`其他费用`)
FROM
 salary


【更新数据】

UPDATE 
 salary 
SET 
 `其他费用` = JSON_SET( `其他费用`, "$.chailv", 10000, "$.gaowen", 2000 ) 
WHERE
 姓名 = "韩梅梅" AND `月份` = "8月"


End

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/1782.html

标签: json_extract
分享给朋友:

“MySQL_JSON格式存取_mysql操作json类型数据” 的相关文章

79.idea中git合并分支操作分享

文章目录前言1.fetch的操作2.合并最新代码到当前的开发分支3.解决冲突4.分支合并:5.完成代码合并总结前言git的操作在日产的工作中也非常重要,团队化的代码管理,每次如果代码被别人覆盖或者自己的代码不能提交到服务器那是灾难性的结果,本篇进行一篇分享来总结下idea中git的操作帮助java开...

Windows 下 Git 拉 Gitlab 代码

读者提问:『阿常你好,Windows 下 Git 拉 Gitlab 代码的操作步骤可以分享一下吗?』阿常回答:好的,总共分为五个步骤。一、Windows 下安装 Git官网下载链接:https://git-scm.com/download/winStandalone Installer(安装版)注意...

html5+css3做的响应式企业网站前端源码

大家好,今天给大家介绍一款,html5+css3做的响应式企业网站前端源码 (图1)。送给大家哦,获取方式在本文末尾。首页banner幻灯片切换特效(图2)首页布局简约合理(图3)关于我们页面(图4)商品列表(图5)商品详情(图6)服务介绍(图7)新闻列表(图8)联系我们(图9)源码完整,需要的朋友...

el-table内容\n换行解决办法

问题请求到的数据带有换行符 '\n'但页面展示时不换行statusRemark: "\"1、按期完成计划且准确率100%,得100分;\n2、各项目每延误1天,扣1分;每失误1次或者员工投诉1次,扣3分,失误层面达到公司级影响较大的,该项绩效分数为0\"\n&...

多项修正 尼康D4s发布最新1.10版固件

尼康公司与2014年8月27日发布了D4s的最新固件,固件版本号为C:1.10。这次固件升级,主要解决了一些BUG,并且对拍摄菜单与相机操作做了一定调整。下面是本次新固件的具体信息:尼康发布D4s最新C固件 1.10版对C固件升级到1.10版所作的修改:当选定运动VR模式并换上 AF-S 尼克尔 4...

《暗黑破坏神 2:重制版》PC 版 2.3 版本发布,支持英伟达 DLSS

IT之家 12 月 3 日消息,暴雪为《暗黑破坏神 2:重制版》PC 版发布了更新 2.3 版本,添加了“离线难度缩放”滑块(玩家可以在单人游戏时增加挑战和奖励的级别)、多项辅助功能和用户界面改进,以及英伟达 DLSS 支持。玩法改进:玩家现在可以在离线游戏的选项菜单中使用“游戏难度等级”,它提供与...