MySQL中JSON数据类型的操作和分析

编程教程 > WEB > JavaScript (2261) 2024-11-26 14:39:04
说明:json除了键值对的形式以外,还包括Array数列形式,这在mysql5.7及以上也是支持的,对Array中元素的操作相当于直接对键值对中的值操作,少了“键”的定位这一步,这里不单独展示,所有的函数都都同时支持,大同小异
 

1. insert(插入)操作

先用insert给出操作面向的数据对象
insert into jwc(st_num,info) value('131141','{"数学":[95,4],"英语":{"英语上":[87,3],"英语下":[82,3]},"体育":"不及格"}')

2. select(投影)操作

  • 对于JSON数据的选择有一个重要的函数——json_extract()
//选择“数学”对应的值
select json_extract(info,"$.数学") from jwc where id='131141'
 
  • 也可以用info->”$.数学”代替json_extract()函数
//选择“数学”对应的值
select info->"$.数学" from jwc where id='131141'
  • 用json_keys()函数选择所有的键值
select json_keys(info) from jwc
  • json中的path路径 
    .a.b:表示键a下的键b.a.b:表示键a下的键b.a[1]:表示键a对应的值(如果是列表的话)的第二个元素

3. where选择操作

  • json_contains(column,elem,key)函数判断包含带有elem元素的key的column属性是否存在
//注意中间elem(95)一定要用字符串形式表示
select * from jwc where json_contains(info,'95','$.数学')
  • json_search()函数:直接对“值”(且值必须是字符串,数列或者键值对都不行)或数列中的元素操作
//json_search的第二个参数one表示找一个,all表示找到所有
select * from jwc where json_search(info,'one',"%及格") is not null;
  • 直接利用键值进行选择
select * from jwc where info->'$.数学[0]'>90;

4. update更新操作

  • json_array_append()函数:直接在定位元素的后面添加
//对于非列表的值直接扩展成列表
 update personal_info set info=json_array_append(info,'$."数学"',4) where id=6;
  • json_array_insert()函数:在指定位置插入元素
update personal_info set info=json_array_insert(info,'$."数学"[0]',4) where id=6;
  • json_set():直接设定某值
update personal_info set info=json_set(info,'$."数学"',4) where id=6;
  • json_merge(column,key-value)函数:向json类型字段中添加元素
update personal_info set info=json_merge(info,'{"提示":"this is a test"}') where id=6;
  • json_replace()函数
update personal_info set info=json_replace(info,'$."提示"','this is another test') where id=6;

缺陷与思考

上述 是关于mysql对json数据类型的操作介绍,下面分析一下json数据类型使用的一些问题

  1. 所有的函数在选择时候的依据都是“值”,不能依靠“键”,如json_search,json_contain,这样对于键的选择就必须要指明,这在一些结构不固定,“键”不明确的情况不太方便。
  2. 没有发现对“键”的模糊查找
  3. 很多情况下,对值的修改都限定为字符串,不能改为数列或者键值对形式。如下将数学的值直接改为数列是不能执行的:
    update personal_info set info=json_replace(info,'$."提示"','this is another test','$."数学"',[94,3]) where id=6;
 

也就说,对数列和字典的支持还不够。

以上提出的这些缺陷或许是因为我对mysql了解不够深入,或许mysql有相应的解决办法,这里暂时存疑,希望知道的朋友能告知,以上。


评论
User Image
提示:请评论与当前内容相关的回复,广告、推广或无关内容将被删除。

相关文章
环境说明1.MySQL5.7(注意,json格式最低需要改版本支持);2.存json数据的数据库字段类型必须是json,不能是varchar;
MySQL,从大概5.7版本开始支持json数据类型,但是5.7的json查询不支持创建索引,在MySQL 8.0.17 后支持了索引,但是创建和查询使用索引与常规索引不同
说明:json除了键值对的形式以外,还包括Array数列形式,这在mysql5.7及以上也是支持的,对Array中元素的操作相当于直接对键值对中的值操作,少了“键”的定位这一步,这里不单独展示,...
java json字符串转对象_json转换为java对象_ json字符串转对象数组
有些时候你可能会导出大量的JSON数据到文件中,或者说将所有数据导入到JSON文件。和任何大数据集一样,您不能只将其全部放入内存并将其写入文件。 它需要一段时间
JavaScript/JS读取文本/JSON文件内容let file = files[0];var reader = new FileReader();read
Java EE 8 JSON Pointer讲解,Java EE 8包含JSON处理API的更新,并为最新的JSON标准提供最新的IEFT标准。
handlerexceptionresolver 返回json
Form前置准备首先我们有一个表单<form id="params"&gtl; <input name="userName" value="123"&gtl; <...
前言值得一提的是JSON只有数组数据类型
Log4j 2 简介       Apache Log4j 2是对Log4j 1.x的升级,相对于其先前版本进行了重大改进,例如性能改进,自动重新加载已修改的配置文件,java 8 lambda...
在vue2.0中使用了axios库,设置请求头Content-Type='application/json;charset=UTF-8'无效axios.defaults.headers.comm...
httpclient4.5使用详解 httpclient 4.5 post传递json参数
偶然遇到一个spring boot 的接口错误,Content type 'application/json;charset=UTF-8' not supported经过排查发现是参数里面的对象...
       学习使用Gson JsonReader类,这是一个基于拉的流式JSON解析器,它有助于将JSON作为标记流来读取​GSON1. JsonReader是什么JsonReader是流式...