MySQL_JSON格式存取

昨天说了,今天单独拿一篇出来写一下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 salaryWHERE 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

(0)

相关推荐

  • 5 分钟掌握 Python 中常见的配置文件

    为什么要写配置文件 在开发过程中,我们常常会用到一些固定参数或者是常量.对于这些较为固定且常用到的部分,往往会将其写到一个固定文件中,避免在不同的模块代码中重复出现从而保持核心代码整洁. 这个固定文件 ...

  • httprunner学习21-正则表达式提取与校验

    前言 有些接口返回的并不是json格式的内容,返回的是html或者xml格式的内容,这种就不能用前面的 content.的方法去提取了. httprunner 支持正则表达式提取(extract)参数 ...

  • PHP将数组存入数据库中的四种方式

    PHP将数组存入数据库中的四种方式

  • MySQL 从零开始:04 表的增删改查

    在上一小节中介绍了 MySQL 数据库的一些最最最基础的入门级也是必须要掌握的10条语句,本节将继续深入学习 MySQL 的增删改查语句.本节讲的增删改查是相对于表 而言的. 1.准备工作 想要对表进 ...

  • 抓紧让孩子来了解电脑阅卷格式(如图),了...

    抓紧让孩子来了解电脑阅卷格式(如图),了解孩子的字体,看合不合格.图片都是电脑扫描出来的. 小学字写的不好,还有时间,赶紧抓去练.初中高中把字写工整清晰,准备中考高考的学子们看看阅卷的要求和注意事项, ...

  • 家谱怎么编写,有什么格式?

    家谱的形式和内容 一.什么是家谱? 家谱作为中华几千年历史发展传承而来的文化表现形式,虽然在长期的发展过程中因各种因素而编写形式有所不同,在编写体例.记载范围.记载内容和编修重点会有所不同,但其格式规 ...

  • 修一部完整家谱,这26种格式要掌握

    一部体例完整的家谱,大致应有以下26项: 1.谱名 一般称为族谱.家谱.家乘.家志.家传.通谱.统谱.谱录.谱牒.世牒.世谱.世家.世典.宗谱.支谱.房谱.祖谱.故谱.合谱.谱传.真谱.私谱.本书.族 ...

  • 录音怎么转换成mp3格式?

    在生活中我们总是遇到各种问题,比如当我们在做某些会议纪要时,发现对方讲话语速太快,我们手速来不及跟上,而当我们选择用录音笔记录下来,会议结束之后再进行查缺补漏以及一些整理时,发现边听边写还是很耗费时间 ...

  • pdf是一种什么格式?pdf怎么转换成jpg图片?

    在生活工作中我们需要用到pdf格式的文件的地方是非常多的,不过有时候也需要将其pdf格式转换成其它格式的.像为了更改内容我们需要将其转换成word格式进行编辑,而为了更方便我们使用或特殊需求,我们则需 ...

  • 通过excel条件格式和自定义两种方法动态标记文本色彩,简单好用

    通过excel条件格式和自定义两种方法动态标记文本色彩,简单好用

  • 一分钟搞定PDF转Word,这个格式转换网站,千万收藏好!

    来源:秋叶办公技巧 编辑:萌萌 hello!大家好,我是今天的秋叶办公技巧的小助手小梦! 大家在日常工作中是不是时常会遇到需要对文档格式进行转化的情况. 比如 Word 转 PDF,PPT 转 PDF ...

  • 广州引入地下智能立体车库 存取车只需45秒 108个车库位仅占地35平米

    "买车易,停车难"是如今社会越来越突出的矛盾,停车位不足,停车泊位供需矛盾严重失衡.为了缓解此矛盾,各种政策.新型车库也应运而生.但在密集的城市里,停车难依旧被市民诟病.在城市&q ...

  • 七言绝句格律常见格式

    ! 1.平起平收(即首句平起入韵式)如: (例) (标准格式) 早发白帝城(李白) 朝辞白帝彩云间 平平仄仄仄平平 千里江陵一日还 仄仄平平仄仄平 两岸猿声啼不住 仄仄平平平仄仄 轻舟已过万重山 平平 ...