MySQL中JSON使用

文章目录

  • 前言

    • 1.创建表和插入数据:

    • 2.查询json中的使用字段:

    • 3.json科普:

    • 4.mysql中操作json的函数:

      • 4.1 JSON_ARRAY:生成json数组。

      • 4.2 JSON_OBJECT:生成对象。

      • 4.3 JSON_CONTAINS:查询指定数据是否存在。

      • 4.4 JSON_CONTAINS_PATH:查询指定路径是否存在。

      • 4.5 JSON_EXTRACT:查找指定的数据:

      • 4.6 获取json中所有的keys:

      • 4.7 JSON_UNQUOTE:去掉 json 值的引号'

  • 总结

前言

Mysql在5.7.8开始对json原生支持,本篇文章对mysql中使用json进行些简单的总结,希望能帮助到使用的朋友。

参考:
https://blog.csdn.net/weixin_44377973/article/details/107829700?utm_medium=
distribute.pc_relevant.none-task-blog-baidujs_title-0&spm=1001.2101.3001.4242

1.创建表和插入数据:

CREATE TABLE tb_base_info ( id BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT, content JSON ); INSERT INTO tb_base_info (content) VALUES ( '{'author': 'Captain&D', 'blog': 'https://www.cnblogs.com/captainad'}' );

2.查询json中的使用字段:

其中->>为去掉查询的值的双引号,->为带着双引号。
其中:$:表示当前正在使用的JSON文档,.keyName:JSON对象中键名为 keyName 的值,.*:表示 JSON 对象中的所有 value

SELECT  content ->> '$.blog' FROM tb_base_info

当然json字段属性也是支持过滤的:

WHERE student->'$.id' in (1,5)
WHERE student->'$.id' = 1 or student->'$.id' = 5;

like使用查询:

where contact ->> '$.QQ' like '25%';

如果存储的是数组的话可以支持索引查询:

SELECT  content ->> '$[0]' FROM tb_base_info

3.json科普:

json的语法规则:

(1)数据为键值对存储key:val;(2)数据由逗号分隔;(3)大括号保存对象;(4)中括号保存数组。

json数字可以是整型或者浮点型。

json对象可以包含多个键值对。

json还可以是数组的格式,[{},{}]。

json逻辑值:{ “flag”:true }
json可以设置为null:{ “note”:null }
但是在java中使用fastjson可能会过滤掉为null的值。

4.mysql中操作json的函数:

4.1 JSON_ARRAY:生成json数组。

JSON_ARRAY(val1,val2,val3...)

4.2 JSON_OBJECT:生成对象。

JSON_ARRAY(val1,val2,val3...)

4.3 JSON_CONTAINS:查询指定数据是否存在。

JSON_CONTAINS(json_doc, val[, path])

举例:

select name from student where json_contains(contact,''15037334666'','$.phone');

结果说明:包含则返回1,否则返回0。如果参数为 NULL 或 path 不存在,则返回NULL

4.4 JSON_CONTAINS_PATH:查询指定路径是否存在。

JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...)

举例:

select id,name,json_contains_path(contact,'one','$.phone') from student;

说明:存在则返回1,否则返回0。one_or_all 只能取值 “one” 或 “all”,one 表示只要有一个存在即可,all表示所有的都存在才行

4.5 JSON_EXTRACT:查找指定的数据:

语法:

JSON_EXTRACT(json_doc, path[, path] ...)

举例:

select id,name,json_extract(contact,'$.QQ') QQ from student;select id,name,json_extract(contact,'$.QQ','$.wechart') contact from student;

备注:如果抽取出多个path,则返回的数据生成一个 json array

4.6 获取json中所有的keys:

JSON_KEYS(json_doc[, path])

举例:

select id,name,json_keys(contact) contact from student;

4.7 JSON_UNQUOTE:去掉 json 值的引号'

JSON_UNQUOTE(val)

举例:

select id,name,json_unquote(json_extract(contact,'$.QQ')) QQ from student;

总结

当然mysql中还有其他未使用的json函数,但是可能并不会很常用,因为mysql的计算能力很差,在真正的开发中我们还是要尽量的减少mysql的计算,尽可能的把业务计算放到业务代码中取实现。

(0)

相关推荐

  • mysql中json字段查询时间范围的方法

    在开发过程中经常会定义一些扩展字段,且需要增加查询,在以往的mysql版本中,json结构是不支持查询的,这样就导致我们不得不新定义字段.在mysql 5.7之后,为了解决这一问题,增加了相关的查询. ...

  • 在处理jsp读取mysql中遇到的问题记录

    在我第一次使用jdbc,来通过jsp读取mysql中遇到一些问题记录一下. 首先都是一个DBHelper.java的工具类, package util; import java.sql.Connect ...

  • Python中Json和dict区别对比?入门分享!

    最近有人问小编说:Python开发中字典和Json的区别是什么?关于这个问题,小编通过下文为大家介绍一下. 什么是字典? 字典是一种数据结构,而json是一种数据格式就会有一些形式上的限制,比如jso ...

  • mysql中cast() 和convert()的用法讲解

    一.在mysql操作中我们经常需要对数据进行类型转换.此时我们应该使用的是cast()或convert(). 二.两者的对比 相同点:都是进行数据类型转换,实现的功能基本等同 不同点:两者的语法不同, ...

  • 记一次MySQL中Waiting for table metadata lock的解决方法

    最近项目中的数据库查询经常挂起,应用程序启动后也报操作超时.测试人员就说数据库又挂了(貌似他们眼中的连接失败,查询无果都是挂了),通过 show processlist 一看,满屏都是 Waiting ...

  • MYSQL中UNION和UNION ALL的区别有哪些?

    在mysql中如何想要对两个结果集进行合并操作,可以使用UNION和UNION ALL,如果只是想要去除掉重复的记录,属于UNION ALL 即可,但是如何想要除掉没有重复行数据,就要使用Union. ...

  • Mysql中timestamp用法详解

    前言:时间戳(timestamp) 前言:时间戳(timestamp) 前言:时间戳(timestamp),一个能表示一份数据在某个特定时间之前已经存在的. 完整的. 可验证的数据,通常是一个字符序列 ...

  • MySQL中的SQL Mode及其作用

    与其它数据库不同,MySQL可以运行在不同的SQL Mode下.SQL Mode定义MySQL应该支持什么样的SQL语法,以及它应该执行什么样的数据验证检查.SQL Mode可以设置为一组应做检查的代 ...

  • MySQL中的乐观锁,悲观锁和MVCC全面解析

    这篇文章主要介绍了MySQL中的乐观锁和悲观锁和MVCC全面解析的相关资料,帮助大家更好的理解和学习MySQL数据库,感兴趣的朋友可以了解下前言在数据库的实际使用过程中,我们常常会遇到不希望数据被同时 ...