Mysql如何对json数据进行查询及修改

yizhihongxing

MySQL 5.7及以上版本支持JSON类型,可以对JSON数据进行查询和修改。下面将详细讲解MySQL如何对JSON数据进行查询和修改的攻略。

查询JSON数据

1. 使用->符号

使用->符号可以从JSON数据中提取指定字段的值。

语法:

SELECT json_column->'$.key' FROM table_name;

其中,json_column是JSON类型的列,key是需要提取的字段名,table_name是表名。

示例:从table1表中提取指定字段的值。

CREATE TABLE table1 (
  id INT AUTO_INCREMENT PRIMARY KEY,
  data JSON NOT NULL
);

INSERT INTO table1 (data) VALUES
('{"name": "Tom", "age": 18, "gender": "male"}'),
('{"name": "Jim", "age": 20, "gender": "female"}'),
('{"name": "Lucy", "age": 21, "gender": "female"}');

SELECT data->'$.name', data->'$.age' FROM table1;

输出:

+------------+-----------+
| data->'$.name' | data->'$.age' |
+------------+-----------+
| "Tom"      | 18      |
| "Jim"      | 20      |
| "Lucy"     | 21      |
+------------+-----------+

2. 使用JSON_EXTRACT函数

JSON_EXTRACT函数可以从JSON数据中提取指定字段的值。

语法:

SELECT JSON_EXTRACT(json_column, '$.key') FROM table_name;

其中,json_column是JSON类型的列,key是需要提取的字段名,table_name是表名。

示例:从table1表中提取指定字段的值。

SELECT JSON_EXTRACT(data, '$.name'), JSON_EXTRACT(data, '$.age') FROM table1;

输出:

+--------------------------+------------------------+
| JSON_EXTRACT(data, '$.name') | JSON_EXTRACT(data, '$.age') |
+--------------------------+------------------------+
| "Tom"                    | 18                    |
| "Jim"                    | 20                    |
| "Lucy"                   | 21                    |
+--------------------------+------------------------+

修改JSON数据

1. 使用->符号

使用->符号可以修改JSON数据中指定字段的值。

语法:

UPDATE table_name SET json_column = JSON_SET(json_column, '$.key', value) WHERE condition;

其中,json_column是JSON类型的列,key是需要修改的字段名,value是要修改为的值,condition是修改的条件,table_name是表名。

示例:将table1表中年龄为18岁的人的性别修改为"female"。

UPDATE table1 SET data = JSON_SET(data, '$.gender', 'female') WHERE data->'$.age' = 18;

2. 使用JSON_SET函数

JSON_SET函数可以修改JSON数据中指定字段的值。

语法:

UPDATE table_name SET json_column = JSON_SET(json_column, '$.key', value) WHERE condition;

其中,json_column是JSON类型的列,key是需要修改的字段名,value是要修改为的值,condition是修改的条件,table_name是表名。

示例:将table1表中年龄为20岁的人的性别修改为"male"。

UPDATE table1 SET data = JSON_SET(data, '$.gender', 'male') WHERE JSON_EXTRACT(data, '$.age') = 20;

注意,使用JSON_SET函数时,需要指定新值的JSON格式,否则可能会报错。例如,我们需要修改名叫"Tom"的信息中的年龄和性别。

UPDATE table1 SET data = JSON_SET(data, '$.age', 20, '$.gender', 'male') WHERE JSON_EXTRACT(data, '$.name') = 'Tom';

这里需要为新值指定JSON格式:'$.age', 20, '$.gender', 'male',其中逗号不可省略。

以上就是MySQL如何对JSON数据进行查询及修改的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Mysql如何对json数据进行查询及修改 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • 详解如何利用C++实现一个反射类

    实现一个反射类需要在设计编译时对代码进行注入,故需要使用C++的元编程能力。下面是具体步骤: 1. 定义一个工厂类 反射需要一个通用的工厂类来创建所需类的实例。这个工厂类需要能够被任何需要使用反射类的代码访问。下面是一个通用工程类的示例。 template<typename Base, typename… Args> struct Facto…

    C 2023年5月23日
    00
  • 如何用C++求两个数的最大公约数和最小公倍数

    我们可以使用以下两种方法求出两个数的最大公约数(Greatest Common Divisor, GCD)和最小公倍数(Least Common Multiple, LCM)。 方法一:欧几里得算法 欧几里得算法又称辗转相除法,基本原理是:两个整数的最大公约数等于其中较小的数和两数相除余数的最大公约数。 对于两个正整数a、b(a>b)我们有: $gcd…

    C 2023年5月23日
    00
  • 利用上下文属性将 C++ 对象嵌入 QML 里

    利用上下文属性将 C++ 对象嵌入 QML 里需要遵循以下步骤: 构建 C++ 类,使其能够注册到 QML 中 创建 QML 文件,利用上下文属性将 C++ 对象嵌入到 QML 中 在 QML 中使用 C++ 对象 下面我们用两个示例说明这个过程。 示例一 假设我们需要向 QML 注册名为 Person 的 C++ 类,并将其实例化之后添加到 QML 上下文…

    C 2023年5月22日
    00
  • C语言实现航班售票系统 C语言实现航班管理系统

    C语言实现航班售票系统/C语言实现航班管理系统 1. 系统需求分析 从乘客角度: 查询已有航班信息。 按起降时间、出发地、目的地、班次号等筛选符合需求的航班信息。 预定航班票。 取消预定航班票。 查看已预定航班票。 从航空公司角度: 增加、删除、修改航班信息。 航班出发前取消航班。 确认航班售票情况。 2. 功能设计 显示菜单,包括: 登录; 注册; 查询航…

    C 2023年5月30日
    00
  • C++ 中类对象类型的转化的实例详解

    C++ 中类对象类型的转化的实例详解 什么是类型转换? 类型转换是将数据从一种数据类型转换为另一种数据类型的过程。在 C++ 中,有几种类型转换的方式: 隐式类型转换:在表达式中,某些情况下,C++ 会自动将一种类型转换为另一种类型。例如,int x = 10; float y = x; 在将 int 类型赋值给 float 类型时,C++ 会自动完成数据类…

    C 2023年5月22日
    00
  • 约瑟夫环问题(数组法)c语言实现

    约瑟夫环问题(数组法)C语言实现 问题描述 有 $n$ 个人围成一圈,第 $m$ 个人开始报数,报到 $m$ 的人出圈,然后从出圈的下一个人开始继续报数,直到圈中只剩下一人。求出该人的编号。 解法思路 采用数组法解决约瑟夫环问题,主要的思路是:构建一个大小为 $n$ 的数组,来表示 $n$ 个人在约瑟夫环中的位置,将这些位置依次删除,直到只有一个人为止。 具…

    C 2023年5月23日
    00
  • C++11各种锁的具体使用

    C++11各种锁的具体使用 在多线程编程时,锁是常用的线程同步机制之一。C++11中提供了多种不同的锁类型,用于处理不同的并发情况,本文将详细介绍这些锁的用法。 1、互斥锁(std::mutex) 使用互斥锁可以实现对共享资源的互斥访问。 #include <iostream> #include <mutex> #include &l…

    C 2023年5月22日
    00
  • C语言实现栈的示例详解

    C语言实现栈的示例详解 栈(Stack)是一种非常重要的数据结构,在许多编程语言中都有广泛的应用。在C语言中,我们可以利用数组来实现栈数据结构。下面将介绍C语言实现栈的示例详解。 栈的结构 栈是一种线性数据结构,它具有以下特点: 后进先出(LIFO):最后压入栈的元素最先出栈; 插入(入栈)和删除(出栈)操作都在栈顶进行。 示意图如下: |_______| …

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部