广告
返回顶部
首页 > 资讯 > 数据库 >Mysql怎么对json数据进行查询及修改
  • 637
分享到

Mysql怎么对json数据进行查询及修改

2023-07-02 15:07:55 637人浏览 八月长安
摘要

这篇文章主要介绍“Mysql怎么对JSON数据进行查询及修改”,在日常操作中,相信很多人在Mysql怎么对json数据进行查询及修改问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mysql怎么对json数据进

这篇文章主要介绍“Mysql怎么对JSON数据进行查询及修改”,在日常操作中,相信很多人在Mysql怎么对json数据进行查询及修改问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mysql怎么对json数据进行查询及修改”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

    对json数据进行查询及修改

    • 使用 字段->'$.json属性' 进行查询条件

    • 使用 json_extract 函数查询,json_extract(字段, "$.json属性")

    • 根据json数组查询,用 JSON_CONTaiNS(字段, JSON_OBJECT('json属性', "内容")) : [{}]查询这种形式的json数组

    • Mysql5.7以上支持JSON的操作,以及增加了JSON存储类型

    • 一般数据库存储JSON类型的数据会用JSON类型或者TEXT类型

    几个相关函数

    Mysql怎么对json数据进行查询及修改

    示例

    Mysql怎么对json数据进行查询及修改

    我这里没有创建json的字段格式,而是使用了text存储json 。

    注意:用JSON类型的话1)JSON列存储的必须是JSON格式数据,否则会报错。2)JSON数据类型是没有默认值的。

    插入json格式的数据到这一列中:

    {"age": "28", "pwd": "lisi", "name": "李四"}

    查询

    select * from `offcn_off_main` where json_extract(json_field,"$.name") = '李四'
    select * from `offcn_off_main` where json_field->'$.name' = '李四'

    使用explain可以查看到无法使用索引

    所以需要修改:

    mysql原生并不支持json列中的属性索引,但是我们可以通过mysql的虚拟列间接的为json中的某些属性创建索引,原理就是为json中的属性创建虚拟列,然后通过给虚拟列建立索引,从而间接的给属性创建了索引。

    在MySQL 5.7中,支持两种Generated Column,即Virtual Generated Column和Stored Generated Column,前者只将Generated Column保存在数据字典中(表的元数据),并不会将这一列数据持久化到磁盘上;后者会将Generated Column持久化到磁盘上,而不是每次读取的时候计算所得。很明显,后者存放了可以通过已有数据计算而得的数据,需要更多的磁盘空间,与Virtual Column相比并没有优势----(其实我觉得还是有优势毕竟会少一些查询计算)

    因此,MySQL 5.7中,不指定Generated Column的类型,默认是Virtual Column。

    如果需要Stored Generated Golumn的话,可能在Virtual Generated Column上建立索引更加合适,一般情况下,都使用Virtual Generated Column,这也是MySQL默认的方式。

    格式如下:

    fieldname <type> [ GENERATED ALWAYS ] AS ( <expression> ) [ VIRTUAL|STORED ] [ UNIQUE [KEY] ] [ [PRIMARY] KEY ] [ NOT NULL ] [ COMMENT <text> ]

    所以我这里:

    ALTER TABLE 'off_main' `names_virtual` VARCHAR(20) GENERATED ALWAYS AS (`json_field` ->> '$.name') not null;

    Note: 利用操作符-&raquo; 来引用JSON字段中的KEY。在本例中字段names_virtual为虚拟字段,我把它定义成不可以为空。在实际的工作中,一定要集合具体的情况来定。因为JSON本身是一种弱结构的数据对象。也就是说的它的结构不是固定不变的。

    给虚拟字段增加索引:

    CREATE INDEX `names` ON `off_main`(`names_virtual`);

    注意如果虚拟字段并不是创建表是添加的,而是后面加的,增加索引时如果有的行中虚拟字段为null,但是又设置了它不能为null,那么索引无法创建成功,提示column can not be null.

    增加索引后 explain看下即可看到用到了索引,并且虚拟字段的值会随着json字段的属性修改而自动变化。

    来看看修改

    update off_main set json_field = json_set(json_field,'$.phone', '132') WHERE id = 45 //同时修改多个UPDATE offcn_off_main set json_field = json_set(json_field,'$.name',456,'$.age','bbb') WHERE id = 45

    json_set() 方法存在的则会覆盖,不存在的会添加。

    删除

    UPDATE offcn_off_main set json_field = json_remove(json_field,'$.pwd','$.phone') WHERE id = 45

    插入

    UPDATE offcn_off_main set json_field = json_insert(json_field,'$.pwd','111') WHERE id = 45

    insert与update不同之处在于insert不存在的会增加,存在的不会覆盖

    Mysql处理json数据

    如果数据量小的话,将json数据直接复制到mysql的json字段中,如果数据过大可以通过java等后台形式对json数据解析,然后写入数据库中。

    查询操作 

    select *,json->'$.features[0].geometry.rings' as rings from JSON;

    从一张表读取一部分数据存入另一张表中(一条数据)

    insert into DT_village(name, border) SELECT  json->'$.features[0].attributes.CJQYMC',json->'$.features[0].geometry.rings'from JSON;

    读取json数据并写入数据库(此时使用的是定义函数的形式来执行方法,可以定义便量)

    #清空数据库TRUNCATE table DT_village; #定义存储过程delimiter //DROP PROCEDURE IF EXISTS insert_test_val;##num_limit 要插入数据的数量,rand_limit 最大随机的数值CREATE PROCEDURE insert_test_val()  BEGIN     DECLARE i int default 0;    DECLARE a,b varchar(5000);     WHILE i<10 do      set a=CONCAT('$.features[',i,'].attributes.CJQYMC');      set b=CONCAT('$.features[',i,'].geometry.rings');      insert into DT_village(name, border) select              #json->'$.features[0].attributes.CJQYMC',json->'$.features[0].geometry.rings'                                                 # (json->a),(json->b)   json_extract(json,a),json_extract(json,b)      from JSON;      set i = i + 1;     END WHILE;   END// #调用存储过程call insert_test_val();

    调用游标的方式获取jsosn数据中的一行,并执行插入操作

    delimiter //drop procedure if exists StatisticStore;CREATE PROCEDURE StatisticStore()  BEGIN    #创建接收游标数据的变量    declare j json;#存储json数据    DECLARE i int default 0; #创建总数变量,记录执行次数,控制循环    DECLARE a,b,c varchar(5000);#定义json数组中的某个数据的键值     #创建结束标志变量    declare done int default false;    #创建游标    declare cur cursor for select json from JSON where name = '1';    #指定游标循环结束时的返回值    declare continue HANDLER for not found set done = true;    #设置初始值    set a=CONCAT('$.features[',i,'].attributes.XZQDM');    set b=CONCAT('$.features[',i,'].attributes.XZQMC');    set c=CONCAT('$.features[',i,']');    #打开游标    open cur;    #开始循环游标里的数据    read_loop:loop      #根据游标当前指向的一条数据      fetch cur into j;      #判断游标的循环是否结束      if done then        leave read_loop;#跳出游标循环      end if;      #这里可以做任意你想做的操作      WHILE i<11 do        insert into dt_border(xzq_code,name,border) select                                                           json_extract(j,a),json_extract(j,b),json_extract(j,c)        from JSON;        set i = i + 1;      END WHILE;      #结束游标循环    end loop;    #关闭游标    close cur;     #输出结果    select j,i;  END;#调用存储过程call StatisticStore();

    到此,关于“Mysql怎么对json数据进行查询及修改”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

    您可能感兴趣的文档:

    --结束END--

    本文标题: Mysql怎么对json数据进行查询及修改

    本文链接: https://www.lsjlt.com/news/342772.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • Mysql怎么对json数据进行查询及修改
      这篇文章主要介绍“Mysql怎么对json数据进行查询及修改”,在日常操作中,相信很多人在Mysql怎么对json数据进行查询及修改问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Mysql怎么对json数据进...
      99+
      2023-07-02
    • Mysql如何对json数据进行查询及修改
      目录对json数据进行查询及修改几个相关函数示例查询来看看修改删除插入mysql处理json数据对json数据进行查询及修改 使用 字段->'$.json属性' 进行查询条件使用 json_extr...
      99+
      2022-07-05
      Mysqljson修改 Mysqljson查询 Mysql对json数据
    • MySQL对JSON数据进行查询
      MySQL根据JSON字段的内容检索查询数据 使用 字段 -> ‘$.json’ 属性’ 进行查询条件 以下这两种会快很多,可以自己测试 使用 json_extract 函数查询,json_extract(字段, “$.json...
      99+
      2023-08-16
      mysql json mybatis
    • MySQL对JSON数据进行IN查询
        JSON相关函数可以看这个博客 【MySQL】对JSON数据操作(全网最全)_mysql json_0世界和平0的博客-CSDN博客 SELECT 字段名FROM 表名WHERE CASE WHEN JSON...
      99+
      2023-09-05
      json mysql 后端 数据库
    • 怎么在postgresql中对jsonb数据进行查询和修改
      今天就跟大家聊聊有关怎么在postgresql中对jsonb数据进行查询和修改,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。JS是什么JS是JavaScript的简称,它是一种直译式...
      99+
      2023-06-06
    • php怎么进行数据库查询和修改操作
      PHP 是一种广泛使用的服务器端脚本语言,用于 Web 开发。当开发者需要从数据库中读取数据或对数据库进行修改时,PHP 提供了一些简单而强大的功能,这些功能使得查询和修改数据库变得轻松自如。本文将介绍一些 PHP 中常用的数据库查询和修改...
      99+
      2023-05-14
    • mysql怎么查询慢查询,及杀死对应进
      要查询和处理慢查询,以及杀死对应的进程,可以按照以下步骤进行操作: 1】查询慢查询: 在 MySQL 中,可以通过设置 slow_query_log 参数来启用慢查询日志,并配置 long_query_time 参数设置查询执行时间的阈值。...
      99+
      2023-09-25
      mysql 数据库
    • MySQL对JSON类型字段数据进行提取和查询的实现
      目录前言1. 问题现象2. 解决方案3. JSON数据查询3.1 一般基础查询操作3.2 一般函数查询操作4. JSON数据新增更新删除前言 昨天上线后通过系统报警发现了一...
      99+
      2022-11-13
    • 怎么使用Node.js进行JSON数据的增删改查
      这篇文章主要介绍“怎么使用Node.js进行JSON数据的增删改查”,在日常操作中,相信很多人在怎么使用Node.js进行JSON数据的增删改查问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Node....
      99+
      2023-07-05
    • java怎么对数据库进行增删改查
      在Java中进行数据库的增删改查操作,通常需要使用JDBC(Java Database Connectivity)来实现。以下是一个...
      99+
      2023-08-08
      java 数据库
    • 怎么对MySQL查询结果进行排序
      怎么对MySQL查询结果进行排序,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。  MySQL查询结果如何排序  之前有一个功能...
      99+
      2022-10-18
    • 怎么在MySQL中对查询进行优化
      本篇文章给大家分享的是有关怎么在MySQL中对查询进行优化,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、创建索引规范在学习索引优化之前,需要对创建索引的规范有一定的了解,此...
      99+
      2023-06-08
    • nodejs中怎么对contact主数据进行修改
      本篇文章给大家分享的是有关nodejs中怎么对contact主数据进行修改,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来...
      99+
      2022-10-19
    • Python数据分析之Pandas Dataframe怎么修改、删除及查询
      这篇文章主要介绍“Python数据分析之Pandas Dataframe怎么修改、删除及查询”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python数据分析之Pandas Da...
      99+
      2023-06-30
    • 怎么在MySQL数据库中进行时间查询数据
      这篇文章主要介绍“怎么在MySQL数据库中进行时间查询数据”,在日常操作中,相信很多人在怎么在MySQL数据库中进行时间查询数据问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
      99+
      2023-05-25
      mysql
    • dedecms怎么进行数据库查询
      dedecms进行数据库查询的步骤是:1、登录到DedeCMS后台管理界面;2、导航到“数据库管理”页面;3、根据您的需求,编写相应的查询语句;4、点击执行按钮或提交按钮来执行查询;5、查看符合查询条件的记录即可。DedeCMS ...
      99+
      2023-08-03
    • 应该怎么样去对MySQL数据库的表结构进行修改
      这篇文章给大家分享的是有关应该怎么样去对MySQL数据库的表结构进行修改的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。MySQL ALTER TABLE语句ALTER ...
      99+
      2022-10-18
    • 使用mybatis怎么对数据库进行增删改查
      这篇文章将为大家详细讲解有关使用mybatis怎么对数据库进行增删改查,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。select一个select 元素非常简单。例如:<!--...
      99+
      2023-05-31
      mybatis
    • 利用Mybatis怎么对数据库进行批量修改
      这篇文章将为大家详细讲解有关利用Mybatis怎么对数据库进行批量修改,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。修改的字段值都是一样的,id不同<update id="b...
      99+
      2023-05-31
      mybatis
    • 在SpringMVC中使用Mybatis怎么实现对Mysql数据库进行分页查询
      在SpringMVC中使用Mybatis怎么实现对Mysql数据库进行分页查询?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。第一步,搭建这个小案例,引入spring和mybti...
      99+
      2023-05-31
      springmvc mybatis mysql
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作