【MySQL】MySQL如何查询和筛选存储的JSON数据?

MySQL如何查询和筛选存储的JSON数据?

  • 一、背景介绍
  • 二、支持的JSON数据类型
  • 三、基础数据
    • 3.1 创建表
    • 3.2 插入 JSON 数据
    • 3.3 查询 JSON 数据
  • 四、操作函数
    • 4.1 JSON_OBJECT
    • 4.2 JSON_ARRAY
    • 4.3 JSON_EXTRACT

一、背景介绍

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,在现代应用程序中得到了广泛的应用。处理和存储非结构化数据变得越来越重要。MySQL 是一种常用的关系型数据库管理系统,为了支持非结构化数据的存储和查询,于是 MySQL引入了对JSON数据类型的支持。

MySQL从5.7.8版本开始添加了对JSON的支持,使得我们可以在MySQL数据库中存储和查询JSON格式的数据。本文将介绍如何使用MySQL查询和筛选存储的JSON数据,并提供相应的代码示例。

二、支持的JSON数据类型

从MySQL 5.7.8版本开始,MySQL引入了对JSON数据类型的支持。MySQL可以存储任意的JSON数据,包括对象、数组、字符串等。并且MySQL还对JSON数据类型还提供了一系列的操作函数和运算符,以便于对JSON数据进行查询和操作。

三、基础数据

3.1 创建表

DROP TABLE IF EXISTS `my_table`;
CREATE TABLE `my_table`  (`id` int NOT NULL,`message` json NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;SET FOREIGN_KEY_CHECKS = 1;

上述示例创建了一个名为 my_table 的表,包含一个名为 message 的JSON列。message列可以存储任意的JSON数据。

3.2 插入 JSON 数据

要在JSON列中插入数据,可以使用JSON函数将JSON字符串转换为JSON数据类型。以下是一个示例:

INSERT INTO `my_table` (`id`, `message`) VALUES (1, '{\"age\": 30, \"name\": \"John\"}');
INSERT INTO `my_table` (`id`, `message`) VALUES (2, '{\"age\": 40, \"name\": \"Mary\"}');
INSERT INTO `my_table` (`id`, `message`) VALUES (3, '{\"age\": 50, \"name\": \"Tom\"}');
INSERT INTO `my_table` (`id`, `message`) VALUES (4, '{\"age\": 60, \"name\": \"Jermy\"}');

上述示例在my_table表中插入了4条记录,其中 message 列包含一个JSON对象。

3.3 查询 JSON 数据

可以使用->或者->>运算符来查询JSON数据。->运算符返回JSON对象的属性值,->>运算符返回属性值的字符串表示。

以下是两个

查询JSON数据的示例1:

SELECT message->'$.name' AS name FROM my_table;

结果如下:

在这里插入图片描述

查询示例2:

SELECT * FROM my_table WHERE JSON_EXTRACT(message, '$.age') > 40

结果如下:

在这里插入图片描述

四、操作函数

MySQL提供了一系列的JSON数据操作函数,以方便对JSON数据进行查询和操作。以下是一些常用的JSON数据操作函数:

4.1 JSON_OBJECT

JSON_OBJECT函数用于创建一个JSON对象。以下是一个示例:

SELECT JSON_OBJECT('name', 'John', 'age', 30) AS message;

上述示例创建了一个名为 message 的JSON对象,包含name和age属性。

在这里插入图片描述

4.2 JSON_ARRAY

JSON_ARRAY函数用于创建一个JSON数组。以下是一个示例:

SELECT JSON_ARRAY('apple', 'banana', 'orange') AS fruits;

上述示例创建了一个名为fruits的JSON数组,包含三个元素。

在这里插入图片描述

4.3 JSON_EXTRACT

JSON_EXTRACT函数用于提取JSON数据中的值。以下是一个示例:

SELECT JSON_EXTRACT('{"name": "John", "age": 30}', '$.name') AS name;

上述示例从JSON数据中提取了name属性的值。

在这里插入图片描述

以上只是最基本的用法,关于MySQL操作JSON数据类型的函数还有很多高级用法,等用到的时候再学。

本文完结!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/604507.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LCR 143. 子结构判断

代码与解析 这是我一开始的代码,只过了45/49个测试用例,在测试用例这过不了了,不知道为啥 输入: A [-2,1,-1] B [-2,1,1] 输出 true 预期结果 false /*** Definition for a binary tree node.* public class TreeNode {* int va…

2024 .1.7 Day05_Spark_HomeWork; Spark_SQL

目录 1. 简述Spark SQL与HIVE的对比 2. Spark SQL是什么? 3.代码题 需求1 直接基于DataFrame来处理,完成SparkSQL版的WordCount词频统计。DSL和SQL两种方式都要实现 4.创建Spark DataFrame的几种方式? 5. 创建得到DataFrame的方式有哪些,各自适用场景是怎么…

Nginx(十九) range请求-断点续传/多线程下载

range请求允许服务器只发送请求的一部分响应数据给客户端,通常对大文件传输时,用以实现断点续传、多线程下载等功能。若服务端响应信息头中包含字段 Accept-Ranges:bytes,则表示服务端支持范围请求,且节点范围的单位为字节&#x…

每周一算法:倍增法查找位置

倍增法 倍增法(Binary Lifting),顾名思义,就是利用“以翻倍的速度增长”的思想来解决问题的一类算法,它能够使线性的处理转化为对数级的处理,大大地优化时间复杂度。这个方法在很多算法中均有应用&#xf…

ServiceMesh

服务网格从总体架构上来讲比较简单,由一堆紧挨着各项服务的用户代理,外加一组任务管理流程组成。在服务网格中,代理被称为数据层或数据平面(Data Plane),管理流程被称为控制层或控制平面(Contro…

【IDEA】 解决在idea中连接 Mysql8.0,驱动无法下载问题

本篇继【idea】解决sprintboot项目创建遇到的问题2-CSDN博客 目录 一、Failed to download https://download.jetbrains.com/idea/jdbc-drivers/MySQL/8/LICENSE.txt:Remote host terminated the handshake 二、no dirver files provided com.mysql.cj.jdbc.Driver 三、Serv…

STM32F407ZGT6时钟源配置

1、26M外部时钟源 1、25M外部时钟源

计算机Java项目|基于SpringBoot+Vue的图书个性化推荐系统

项目编号:L-BS-GX-10 一,环境介绍 语言环境:Java: jdk1.8 数据库:Mysql: mysql5.7 应用服务器:Tomcat: tomcat8.5.31 开发工具:IDEA或eclipse 二,项目简介 图片管理系统是一个为学生和…

kotlin take 和 drop

kotlin take的作用 从头开始获取指定数量的元素 val numbers listOf("one", "two", "three", "four", "five", "six") // 取集合的4个集合 Log.d("take", numbers.take(3).toString()) // 打印结果[…

【linux学习】重定向

目录 重定向标准输出、标准输入和标准错误标准输出重定向标准错误重定向将标准输出和标准错误重定向到同一个文件处理不想要的输出标准输入重定向 管道过滤器uniq-报告或者忽略文件中重复的行wc-打印行数、字数和字节数grep-打印匹配行head/tail 打印文件的开头部分/结尾部分te…

基于PGPGPOOL-II部署PostgreSQL高可用环境

PGPOOL-II是一个位于PostgreSQL服务器和 PostgreSQL 数据库客户端之间的中间件,具有以下功能: 1. 连接池:PGPOOL-II可以保持已经连接到 PostgreSQL 服务器的连接,并在使用相同参数(例如:用户名、数据库、协议版本)连接进来时重用它们。这可以减少连接开销,并增加系统的…

nacos与eureka区别

Nacos vs. Eureka: 微服务架构的服务发现之较 随着微服务架构的广泛应用,服务发现成为确保各个微服务之间通信的关键组件。在这个领域,Nacos和Eureka是两个备受关注的解决方案。本文将深入探讨它们的异同,以帮助你在项目中做出明智的选择。 …

C#-程序结构

C# 中的组织结构的关键概念是程序 (program)、命名空间 (namespace)、类型 (type)、成员 (member) 和程序集 (assembly)。 C# 程序由一个或多个源文件组成。 程序中声明类型,类型包含成员,并且可按命名空间进行组织。类和接口就是类型的示例。 字段 (field)、方法、属性和事件…

trino-435:dynamic catalog restful API开发

前置内容 restful API开发所在的位置core->trino-main->metadata模块下。主要实现查看已有catalog、注册catalog实现动态扩展、catalog的删除操作。coordinator和worker节点对该功能接口的实现是有区别的: coordinator节点包含查看已有catalog、注册catalog实现动态扩展…

How can I be sure that I am pulling a trusted image from docker?

1、Error response from daemon: manifest for jenkins:latest not found: manifest unknown: manifest unknown 2、Error response from daemon: pull access denied for nacos, repository does not exist or may require ‘docker login’: denied: requested access to th…

[蓝桥杯学习] ST表

RMQ问题 ST 表 用状态 s[i][j] 记录区间长度为 2^j 的长度的区间的最大值 所以状态转移方程就是 st[i][j] max( st[i][j-1] , st[i(1 << (j-1))][j-1] ) 注意状态转移的方向&#xff0c;保证区间合法性&#xff08;i2^j 不能超过数组大小&#xff09; 写完这些后&am…

Latex论文模板

%!TEX program xelatex \documentclass[12pt,a4paper]{article}% 文档格式 \usepackage{ctex,hyperref}% 输出汉字 \usepackage{times}% 英文使用Times New Roman \setmainfont{TeX Gyre Termes} \title{\fontsize{18pt}{27pt}\selectfont% 小四字号&#xff0c;1.5倍行距 {\h…

大数据Doris(五十一):Colocation Join介绍

文章目录 Colocation Join介绍 一、原理 二、使用方式 1、建表 2、删表

HarmonyOS 应用开发学习笔记 stateStyles:多态样式

1、 HarmoryOS Ability页面的生命周期 2、 Component自定义组件 3、HarmonyOS 应用开发学习笔记 ets组件生命周期 4、HarmonyOS 应用开发学习笔记 ets组件样式定义 Styles装饰器&#xff1a;定义组件重用样式 Extend装饰器&#xff1a;定义扩展组件样式 前面记录了ets组件样式…

Python的基础练习题之学生管理系统

需求 使用Python基础写一个基于控制台的学生管理平台&#xff0c;里面功能分别是&#xff1a;1.录入学生信息2.查找学生信息3.删除学生信息4.修改学生信息5.排序6.统计学生总人数7.显示所有学生信息&#xff0c;要求数据存储在文件里。 代码 代码资源地址可以直接下载 效果图…