MySQL中json_extract函数说明及使用方式

 更新时间:2022年08月25日 13:02:33   作者:江畔独步  
今天看mysql中的json数据类型,涉及到一些使用,使用到了函数json_extract来,下面这篇文章主要给大家介绍了关于MySQL中json_extract函数说明及使用方式的相关资料,需要的朋友可以参考下

1. json_extract 使用场景说明

在日常业务开发中通常mysql数据库中某个字段会需要存储json格式字符串,查询的时候有时json数据较大,每次全部取出再去解析查询效率较低,也较麻烦.

好在Mysql5.7及之后的版本里提供了json_extract函数,可以通过key查询value值(如果是json数组类型,可以通过下标获取对应位置的值),非常方便。

2. MySQL json_extract 函数简介

2.1 函数简介

Mysql5.7版本以后新增的功能,Mysql提供了一个原生的Json类型,Json值将不再以字符串的形式存储,而是采用一种允许快速读取文本元素(document elements)的内部二进制(internal binary)格式。 在Json列插入或者更新的时候将会自动验证Json文本,未通过验证的文本将产生一个错误信息。 Json文本采用标准的创建方式,可以使用大多数的比较操作符进行比较操作,例如:=, <, <=, >, >=, <>, != 和 <=>。

2.2 使用方式

数据存储的数据是json字符串(类型是vachar)。

想要查询出来json中某个字段的值,用到方法是:JSON_EXTRACT()。

语法:

**JSON_EXTRACT(json_doc, path[, path] …)**

用法提示:

  • 如果json字符串不是数组,则直接使用 $.字段名
  • 如果json字符串是数组[Array],则直接使用 $[对应的索引ID]

2.3 注意事项

JSON_EXTRACT性能验证 , 通过查看执行计划,验证全部都是全表扫描。
使用场景:数据量不大json字符串较大则可以采用,数据量较大不建议使用。

3. 数据验证

3.1 提取普通json中的值

说明:

  • 普通字段使用 $.KEY 获取
  • 数组字段使用 $.KEY[index] 获取,注意index从0开始
  • 实际使用中,如下json字符串只需要换成对应的表字段即可,但要注意需对json判空和替换等ETL转换操作.
select 
	json_extract('{"name":"zhangsan","tel_no":"136-6666-6666","hobbies":["basketball","run","sing"]}',"$.name") as name,
	json_extract('{"name":"zhangsan","tel_no":"136-6666-6666","hobbies":["basketball","run","sing"]}',"$.tel_no") as tel_no,
	json_extract('{"name":"zhangsan","tel_no":"136-6666-6666","hobbies":["basketball","run","sing"]}',"$.hobbies[0]") as hobby_1,
	json_extract('{"name":"zhangsan","tel_no":"136-6666-6666","hobbies":["basketball","run","sing"]}',"$.hobbies[1]") as hobby_2,
	json_extract('{"name":"zhangsan","tel_no":"136-6666-6666","hobbies":["basketball","run","sing"]}',"$.hobbies[2]") as hobby_3,
	json_extract('{"name":"zhangsan","tel_no":"136-6666-6666","hobbies":["basketball","run","sing"]}',"$.hobbies[3]") as hobby_4;

结果:

nametel_nohobby_1hobby_2hobby_3hobby_4
“zhangsan”136-6666-6666“basketball”“run”“sing”NULL

3.2 提取json数组的值

site_user表

idnametags
1zhangsan[“COMMON”]
2lisi[“VIP”]
3wangwu[“VVIP”,“PLATINUM”]
4zhaoliu 

提取用户的第一个标签:

select 
	id,
	name,
	tags, 
	json_extract(if(LENGTH(tags)>0,tags, '[]'),"$[0]")  # 如果tags无数据,赋值为空数组
from site_user;

结果:

idnametags
1zhangsan“COMMON”
2lisi“VIP”
3wangwu“VVIP”
4zhaoliuNULL

总结

到此这篇关于MySQL中json_extract函数说明及使用的文章就介绍到这了,更多相关MySQL json_extract函数使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Linux下mysql5.6.33安装配置教程

    Linux下mysql5.6.33安装配置教程

    这篇文章主要为大家详细介绍了Linux下mysql5.6.33安装配置方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • 使用mysql事件调度器定时删除binlog

    使用mysql事件调度器定时删除binlog

    MySQL5.1.6起Mysql增加了事件调度器(Event Scheduler),可以用做定时执行某些特定任务,来取代原先只能由操作系统的计划任务来执行的工作
    2014-03-03
  • MySQL 角色(role)功能介绍

    MySQL 角色(role)功能介绍

    这篇文章主要介绍了MySQL 角色(role)功能的相关资料,帮助大家更好的理解和学习使用MySQL数据库,感兴趣的朋友可以了解下
    2021-04-04
  • mysql 提示INNODB错误的解决方法

    mysql 提示INNODB错误的解决方法

    解决The‘InnoDB’feature is disabled; you need MySQL built with ‘InnoDB’ to have it
    2011-09-09
  • Mybatis集成MySQL使用游标查询处理大批量数据方式

    Mybatis集成MySQL使用游标查询处理大批量数据方式

    这篇文章主要介绍了Mybatis集成MySQL使用游标查询处理大批量数据方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • 浅析MySQL内存的使用说明(全局缓存+线程缓存)

    浅析MySQL内存的使用说明(全局缓存+线程缓存)

    本篇文章是对MySQL内存的使用说明(全局缓存+线程缓存)进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • Ubuntu 服务器安装 MySQL 远程数据库的方法

    Ubuntu 服务器安装 MySQL 远程数据库的方法

    本篇介绍如何在 Linux 服务器上安装 MySQL 数据库,并设置为可远程连接,本文通过命令给大家介绍的非常详细,对Ubuntu 安装 MySQL远程数据库感兴趣的朋友一起看看吧
    2022-08-08
  • Mysql Explain命令的使用与分析

    Mysql Explain命令的使用与分析

    今天小编就为大家分享一篇关于Mysql Explain命令的使用与分析,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • MySQL索引失效的几种情况详析

    MySQL索引失效的几种情况详析

    这篇文章主要给大家介绍了关于MySQL索引失效的几种情况,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • MySQL数据库迁移快速导出导入大量数据

    MySQL数据库迁移快速导出导入大量数据

    今天小编就为大家分享一篇关于MySQL数据库迁移快速导出导入大量数据,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03

最新评论