MySQL数据库基础:JSON函数各类操作一文详解

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL数据库基础:JSON函数各类操作一文详解

前言


很多日常业务场景都会用到json文件作为数据存储起来,而mysql5.7以上就提供了存储json的支撑。往常存储json一般都保留在pg库或者是hive库里面,现在mysql有了支持的话基本业务都可以用mysql来实现。现在mysql8.x版本对json字符出处理已经做的非常完善了。现在就让我们来详细了解一下关于json数据数据类型mysql都有哪些函数能够对其进行操作。


该系列文章将按照这个脉络行文,此系列文章将被纳入我的专栏一文速学SQL各类数据库操作,基本覆盖到使用SQL处理日常业务以及常规的查询建库分析以及复杂操作方方面面的问题。从基础的建库建表逐步入门到处理各类数据库复杂操作,以及专业的SQL常用函数讲解都花费了大量时间和心思创作,如果大家有需要从事数据分析或者数据开发的朋友推荐订阅专栏,将在第一时间学习到最实用常用的知识。此篇博客篇幅较长,值得细读实践一番,我会将精华部分挑出细讲实践。博主会长期维护博文,有错误或者疑惑可以在评论区指出,感谢大家的支持。


一、JSON语法规则



首先我们还是先复习一遍json数据类型的语法规则,这在我的很多文章都有写到:


JSON是一个标记符的序列。这套标记符包含六个构造字符、字符串、数字和三个字面名。


JSON是一个序列化的对象或数组。


数据为  键 / 值 (name/value)对;

数据由逗号(,)分隔;

大括号保存对象(object);

方括号保存数组(Array);

值可以是对象、数组、数字、字符串或者三个字面值(false、null、true)中的一个。值中的字面值中的英文必须使用小写。


如:


"code":"100"


对象由花括号括起来的逗号分割的成员构成,成员是字符串键和上文所述的值由逗号分割的键值对组成:


{“code”:20,"type":"mysql"}


数组是由方括号括起来的一组值构成:


"datesource":[

   {"code":"20", "type":"mysql"},

  {"code":"20", "type":"mysql"},

   {"code":"20", "type":"mysql"}

]


复习完毕之后我们再来对mysql处理json函数实验。


二、JSON函数


首先我们创建一个表来进行操作:

create TABLE json_test(
  id int not null primary key auto_increment,
  content json
  );

接下来,向test_json数据表中插入数据。

insert into json_test(content) values('{"name":"fanstuck","age":23,"address":{"province":"zhejiang","city":"hangzhou"}}')

可以使用“->”和“->>”查询JSON数据中指定的内容。

SELECT content->'$.name' FROM json_test where id =1;

c4bd36855a5246caa726601be3f7f812.png

SELECT content->>'$.address.city' FROM json_test where id =1;

4354576f22c54a53981294171cd00142.png


1.JSON_CONTAINS(json_doc,value)函数


JSON_CONTAINS(json_doc,value)函数查询JSON类型的字段中是否包含value数据。如果包含则返回1,否则返回0。其中,json_doc为JSON类型的数据,value为要查找的数据。


SELECT JSON_CONTAINS(content, '{"name":"fanstuck"}') FROM json_test ;    


860a78cbd90f4e939b8fbb2422faf931.png


注意:value必须是一个JSON字符串。


2.JSON_SEARCH(json_doc ->> '$[*].key',type,value)函数



JSON_SEARCH(json_doc ->> '$[*].key',type,value)函数在JSON类型的字段指定的key中,查找字符串value。如果找到value值,则返回索引数据。


注意:函数的第二个参数type,取值可以是one或者all。当取值为one时,如果找到value值,则返回value值的第一个索引数据;当取值为all时,如果找到value值,则返回value值的所有索引数据。


SELECT JSON_SEARCH(content ->> '$.address', 'one', 'zhejiang') FROM json_test ;

bd989c639c7a4264afc8d8a46b7ecda7.png

SELECT JSON_SEARCH(content ->> '$.address', 'all', 'nanchang') FROM json_test ;

2f33b2721a51464f856bcde3fabd5b24.png


3.JSON_PRETTY(json_doc)函数


JSON_PRETTY(json_doc)函数以标准的格式显示JSON数据。


SELECT JSON_PRETTY(content) FROM json_test ;


e09cf5009577442ab5dd65ba5b6f8fe5.png


4.JSON_DEPTH(json_doc)函数


JSON_DEPTH(json_doc)函数返回JSON数据的最大深度。


SELECT JSON_DEPTH(content) FROM json_test;

ee64b8ca7458465ea11d6ba9d31951cd.png


5.JSON_LENGTH(json_doc[,path])函数


JSON_LENGTH(json_doc[,path])函数返回JSON数据的长度。


SELECT JSON_LENGTH(content) FROM json_test;

 

402e3e6951df4e82bdd8f6a6631fd0c0.png


6.JSON_KEYS(json_doc[,path])函数


JSON_KEYS(json_doc[,path])函数返回JSON数据中顶层key组成的JSON数组。


SELECT JSON_KEYS(content) FROM json_test;

8e28a60d1677415baf573eea5050bbd0.png

7. JSON_INSERT(json_doc,path,val[,path,val] ...)函数


JSON_INSERT(json_doc,path,val[,path,val] ...)函数用于向JSON数据中插入数据。


{"age": 23, "name": "fanstuck", "address": {"ip": "192.168.12.12", "city": "hangzhou", "province": "z


70a3da699d164ca2a7a6e7053e068f6e.png

可以看到,JSON_INSERT()函数并没有更新数据表中的数据,只是修改了显示结果。


8.JSON_REMOVE(json_doc,path[,path] ...)函数


JSON_REMOVE(json_doc,path[,path] ...)函数用于移除JSON数据中指定key的数据。

 SELECT JSON_REMOVE(content, '$.address.city') FROM json_test WHERE id = 2;

f9d24f198fc441eba5ec2c6ddfda0dc2.png


9.JSON_REPLACE(json_doc,path,val[,path,val] ...)函数


JSON_REPLACE(json_doc,path,val[,path,val] ...)函数用于更新JSON数据中指定Key的数据。


SELECT JSON_REPLACE(content,'$.age',20) FROM json_test ;


27b7160211544db5875083c98cbdc8d7.png


可以看到,JSON_REPLACE()函数并没有更新数据表中的数据,只是修改了显示结果。


10.JSON_SET(json_doc,path,val[,path,val] ...)函数


JSON_SET(json_doc,path,val[,path,val] ...)函数用于向JSON数据中插入数据。


 SELECT JSON_SET(content, '$.address.street', 'xxx街道') FROM json_test WHERE id = 1;

7ecb22d2149a420a910c50fb3c9b215e.png


11.JSON_TYPE(json_val)函数


JSON_TYPE(json_val)函数用于返回JSON数据的JSON类型,MySQL中支持的JSON类型除了可以是MySQL中的数据类型外,还可以是OBJECT和ARRAY类型,其中OBJECT表示JSON对象,ARRAY表示JSON数组。

 SELECT JSON_TYPE(content) FROM json_test ;


52ddc057e5ab474580e87d57cc2c96c2.png


12. JSON_VALID(value)函数


JSON_VALID(value)函数用于判断value的值是否是有效的JSON数据,如果是,则返回1,否则返回0,如果value的值为NULL,则返回NULL。

 SELECT JSON_VALID('{"name":"binghe"}'), JSON_VALID('name'), JSON_VALID(NULL);

f2d47aa87dee4f83b5d28b0ae88261ff.png

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
29天前
|
SQL 数据挖掘 测试技术
南大通用GBase8s数据库:LISTAGG函数的解析
南大通用GBase8s数据库:LISTAGG函数的解析
|
2天前
|
SQL 关系型数据库 MySQL
【MySQL基础篇】盘点MySQL常用四大类函数
本文介绍了MySQL中的四大类常用函数:字符串函数、数值函数、日期函数和流程函数。
【MySQL基础篇】盘点MySQL常用四大类函数
|
1月前
|
JSON Java 关系型数据库
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
在Java中,使用mybatis-plus更新实体类对象到mysql,其中一个字段对应数据库中json数据类型,更新时报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
70 4
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
|
18天前
|
SQL 关系型数据库 MySQL
MySQL常见函数第二期,你都用过哪些呢 ?
本期介绍了20个常用的MySQL函数,涵盖日期处理(如CURDATE()、DATE_FORMAT())、数学运算(如ABS()、ROUND())、统计分析(如COUNT()、SUM())等,帮助提高SQL查询效率和数据处理能力。希望对大家的学习有所帮助。
59 7
|
20天前
|
关系型数据库 MySQL
MySQL常见函数第一期,你都用过哪些呢 ?
本期介绍10个常用的MySQL函数:字符串连接(CONCAT)、提取子字符串(SUBSTRING)、获取字符串长度(LENGTH)、转换大小写(UPPER、LOWER)、去除空格(TRIM)、替换字符串(REPLACE)、查找子字符串位置(INSTR)、带分隔符的字符串连接(CONCAT_WS)以及获取当前日期时间(NOW)。
56 8
|
21天前
|
数据采集 关系型数据库 MySQL
MySQL常用函数:IF、SUM等用法
本文介绍了MySQL中常用的IF、SUM等函数及其用法,通过具体示例展示了如何利用这些函数进行条件判断、数值计算以及复杂查询。同时,文章还提到了CASE WHEN语句和其他常用函数,如COUNT、AVG、MAX/MIN等,强调了它们在数据统计分析、数据清洗和报表生成中的重要性。
|
25天前
|
关系型数据库 MySQL 数据处理
【MySQL】函数
MySQL 提供了丰富的函数集,涵盖字符串处理、数值运算、日期时间操作和聚合计算等多个方面。这些函数在日常数据库操作中极为重要,通过合理使用这些函数,可以大大提高数据处理和查询的效率。用户还可以通过自定义函数,扩展 MySQL 的功能以满足特定需求。
28 3
|
27天前
|
关系型数据库 MySQL 数据处理
MySQL函数与约束
MySQL 提供了丰富的函数和强大的约束机制,用于数据处理和完整性维护。通过掌握这些工具,可以有效地管理和分析数据库中的数据,确保数据的一致性和准确性。无论是在日常数据查询中使用内置函数,还是在数据库设计中应用各种约束,都是确保数据库系统稳定、高效运行的关键。希望本文对您理解和应用 MySQL 函数与约束有所帮助。
31 1
|
29天前
|
SQL 测试技术 数据库
|
1月前
|
关系型数据库 MySQL Serverless
MySQL函数
最常用的MySQL函数,包括聚合函数,字符串函数,日期时间函数,控制流函数等
37 1