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

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语言时,很容易掌握其基本语法,包括变量定义、赋值、循环、逻辑运算等操作。然而,在实际开发中,可能会涉及到一些C语言中的小细节,这些细节甚至有可能被一些经验丰富的程序员所忽略。接下来,我们详细讲解“程序员都不知道C语言中的这些小细节”的攻略。 1. 整型溢出 C语言中整型变量通常分为有符号整型和无符号整型。有符号整型可以表示负数,而无符号整型只能表…

    C 2023年5月23日
    00
  • swift语言Codable 用法及原理详解

    Swift语言Codable 用法及原理详解 什么是Codable Codable是Swift4引入的一个协议,用于将Swift对象与外部数据格式(如JSON)进行相互转换。通过实现Codable协议,我们可以将一个包含各种类型属性的对象编码成JSON字符串或从JSON字符串中解码成Swift对象。通过Codable,我们可以更方便安全地处理数据。 Coda…

    C 2023年5月23日
    00
  • C++ 设置和获取当前工作路径的实现代码

    一、C++ 获取当前工作路径的实现代码 为了获得当前正在执行程序的工作目录,我们可以使用C++标准库函数getcwd。getcwd可以在头文件unistd.h中找到。它的原型是: char *getcwd(char *buf, size_t size); 该函数返回当前工作路径的字符串指针,buf是一个指向存储路径名的字符数组的指针。size应该是buf的长…

    C 2023年5月23日
    00
  • 优先队列(priority_queue)的C语言实现代码

    优先队列是一种特殊的队列,每个元素都有一个权值。优先队列不同于一般的队列,它不是先进先出,而是按照元素的权值排序,权值最高的元素最先出队列。 C语言中,我们可以使用结构体和数组来实现优先队列。以下是实现优先队列的C语言代码: #include <stdio.h> #include <stdlib.h> typedef struct p…

    C 2023年5月23日
    00
  • C语言中如何进行动态内存分配?

    C语言中的动态内存分配功能是通过函数库和提供的。动态内存分配指的是程序在运行过程中,根据需要在堆区或自由存储区中动态地为变量分配所需的内存空间,使得程序可以根据需要动态地使用内存,从而更加灵活和高效地使用计算机的资源。 在C语言中,动态内存分配的过程可以分为以下三个步骤: 申请内存空间:使用malloc()函数在堆区分配一块适当大小的内存空间。malloc(…

    C 2023年4月27日
    00
  • 天谕雷罡圣堂怎么加点 天谕雷罡圣堂加点攻略

    天谕雷罡圣堂加点攻略 天谕雷罡圣堂是一款策略RPG游戏,在游戏中加点是非常重要的一件事情。本文将为大家介绍如何正确地加点以及天谕雷罡圣堂加点攻略。 加点原则 根据职业特长加点,如攻击型职业加攻击,防御型职业加防御等; 根据职业技能加点,如有狂暴技能的职业需要加点提升狂暴效果等; 根据自己的游戏风格加点,如喜欢输出的可以加攻击,喜欢坦克的可以加防御等; 根据B…

    C 2023年5月22日
    00
  • C++分析如何用虚析构与纯虚析构处理内存泄漏

    C++的虚析构与纯虚析构可以用来避免内存泄漏。 什么是内存泄漏 内存泄漏指的是程序分配的内存空间没有被释放或回收,导致系统内存资源被浪费。如果内存泄漏持续发生,最终会导致系统性能下降,程序崩溃等问题。 使用虚析构解决内存泄漏 在C++中,当一个基类指针指向一个子类对象时,如果基类中没有定义虚析构函数,当我们使用delete来销毁这个基类指针时,只会调用基类的…

    C 2023年5月23日
    00
  • VS2019使用Windows桌面应用程序模块创建Win32窗口

    在VS2019中创建新的Windows桌面应用程序项目 打开VS2019,选择“创建新项目”; 在弹出的“新建项目”对话框中,选择“Windows桌面应用程序”项目; 在下一步中,选择“Win32应用程序”模板; 给项目命名,并设置存储路径; 最后,点击“创建”按钮,即可创建新的Windows桌面应用程序项目。 在Windows桌面应用程序中创建Win32窗…

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