当前位置: 首页 > news >正文

MySQL中处理JSON数据:大数据分析的新方向,详解与示例

文章目录

  • 1. MySQL中的JSON数据类型
  • 2. JSON函数和运算符
  • 3. 创建JSON列的表
  • 4. 插入JSON数据
  • 5. 查询JSON数据
    • 6. 复杂查询和聚合
    • 7. JSON 数据的索引
    • 8. 总结


在当今的大数据时代,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,因其易于阅读和编写,以及易于机器解析和生成,而被广泛应用于Web应用的数据传输。随着MySQL 5.7的发布,MySQL引入了对JSON数据类型的支持,使得在数据库中直接存储、查询和操作JSON数据成为可能。本文将详细介绍如何在MySQL中处理JSON数据,并提供示例。

1. MySQL中的JSON数据类型

MySQL中的JSON数据类型允许用户存储JSON文档。这些文档可以是对象、数组或两者的组合。以下是JSON数据类型的一些特点:

  1. JSON文档被存储为二进制格式,可以高效地访问JSON元素。
  2. 可以使用JSON关键字和函数对JSON数据进行查询和更新。
  3. 支持对JSON文档的部分内容进行索引,以优化查询性能。

2. JSON函数和运算符

MySQL提供了一系列函数和运算符来处理JSON数据,以下是一些常用的:

  • ->:获取JSON文档的指定成员。
  • ->>:获取JSON文档的指定成员,并将其作为无引号的字符串返回。
  • JSON_EXTRACT(json_doc, path):提取JSON文档中的数据。
  • JSON_SET(json_doc, path, val):更新JSON文档中的数据。
  • JSON_INSERT(json_doc, path, val):向JSON文档中插入数据,如果路径已存在,则不进行任何操作。
  • JSON_REPLACE(json_doc, path, val):替换JSON文档中的数据。
  • JSON_REMOVE(json_doc, path):从JSON文档中删除数据。

3. 创建JSON列的表

首先,我们需要创建一个包含JSON列的表。以下是一个示例:

CREATE TABLE `people` (`id` int(11) NOT NULL AUTO_INCREMENT,`info` json DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

在这个示例中,我们创建了一个名为people的表,其中包含一个JSON列info。

4. 插入JSON数据

接下来,我们向表中插入一些JSON数据:

INSERT INTO `people` (`info`) VALUES 
('{"name": "John Doe", "age": 30, "address": {"street": "123 Main St", "city": "Anytown", "state": "CA"}}'),
('{"name": "Jane Smith", "age": 25, "address": {"street": "456 Elm St", "city": "Othertown", "state": "NY"}}');

5. 查询JSON数据

MySQL 提供了多种函数来处理 JSON 数据。以下是一些常用的 JSON 函数:

JSON_EXTRACT: 从 JSON 文本中提取数据
JSON_UNQUOTE: 去掉 JSON 数据中的引号
JSON_SET: 更新
JSON 文本中的值 JSON_ARRAY 和 JSON_OBJECT: 创建 JSON 数据

示例 1: 提取 JSON 数据中的字段

-- 提取 Alice 的 email
SELECT JSON_EXTRACT(info, '$.email') AS email
FROM users
WHERE name = 'Alice';-- 去掉引号
SELECT JSON_UNQUOTE(JSON_EXTRACT(info, '$.email')) AS email
FROM users
WHERE name = 'Alice';

示例 2: 更新 JSON 数据中的字段

-- 更新 Bob 的 email
UPDATE users
SET info = JSON_SET(info, '$.email', 'bob.newemail@example.com')
WHERE name = 'Bob';

示例 3: 使用 JSON 数据进行查询

-- 查询居住在 New York 的用户
SELECT name
FROM users
WHERE JSON_EXTRACT(info, '$.address.city') = '"New York"';

示例 4: :替换JSON文档中的数据

UPDATE `people` SET `info` = JSON_REPLACE(`info`, '$.address.city', 'Newtown') WHERE `id` = 1;

示例 5: 从JSON文档中删除数据

UPDATE `people` SET `info` = JSON_REMOVE(`info`, '$.phone') WHERE `id` = 1;

6. 复杂查询和聚合

MySQL 的 JSON 函数也支持更复杂的查询和聚合操作。例如,可以结合 JSON 数据进行分组统计。

示例 1: 统计各城市的用户数量

-- 统计每个城市的用户数量
SELECT JSON_EXTRACT(info, '$.address.city') AS city,COUNT(*) AS user_count
FROM users
GROUP BY city;

示例 2: 从 JSON 数组中提取数据
假设我们有一个表记录了用户的爱好,每个用户有多个爱好以 JSON 数组的形式存储:

-- 创建表
CREATE TABLE hobbies (id INT AUTO_INCREMENT PRIMARY KEY,user_id INT,hobbies JSON
);-- 插入数据
INSERT INTO hobbies (user_id, hobbies) VALUES
(1, '["Reading", "Swimming", "Hiking"]'),
(2, '["Cooking", "Traveling"]');

我们可以使用 JSON_CONTAINS 函数来查找包含特定爱好的用户:

-- 查找有 "Traveling" 爱好的用户
SELECT user_id
FROM hobbies
WHERE JSON_CONTAINS(hobbies, '"Traveling"');

7. JSON 数据的索引

虽然 MySQL 支持 JSON 数据类型,但对于大数据分析,性能可能会受到影响。为了提高查询性能,可以对 JSON 数据进行索引。MySQL 支持对 JSON 数据的虚拟列进行索引。

-- 添加虚拟列
ALTER TABLE users ADD COLUMN city VARCHAR(100) GENERATED ALWAYS AS (JSON_UNQUOTE(JSON_EXTRACT(info, '$.address.city'))) VIRTUAL;-- 创建索引
CREATE INDEX idx_city ON users(city);

8. 总结

MySQL 的 JSON 数据类型为处理和分析 JSON 数据提供了强大的工具,使得开发者能够将 JSON 数据与传统的关系型数据结合起来进行更复杂的查询和分析。通过使用 MySQL 提供的 JSON 函数,我们可以轻松地从 JSON 数据中提取、更新和查询信息。此外,通过创建虚拟列和索引,我们可以提高 JSON 数据查询的性能。

相关文章:

MySQL中处理JSON数据:大数据分析的新方向,详解与示例

文章目录 1. MySQL中的JSON数据类型2. JSON函数和运算符3. 创建JSON列的表4. 插入JSON数据5. 查询JSON数据6. 复杂查询和聚合7. JSON 数据的索引8. 总结 在当今的大数据时代,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式&a…...

【图形学】TA之路-矩阵

在 Unity 中,矩阵广泛用于处理各种图形变换,例如平移、旋转、缩放等。矩阵的使用不仅限于三维空间,还可以应用于二维空间的操作。了解矩阵及其运算对于游戏开发和计算机图形学非常重要。Unity 中使用的是行向量不是列向量,这个要注…...

LAMM: Label Alignment for Multi-Modal Prompt Learning

系列论文研读目录 文章目录 系列论文研读目录文章题目含义AbstractIntroductionRelated WorkVision Language ModelsPrompt Learning MethodologyPreliminaries of CLIPLabel AlignmentHierarchical Loss 分层损失Parameter Space 参数空间Feature Space 特征空间Logits Space …...

mac编译opencv 通用架构库的记录

1,通用架构 (x86_64;arm64)要设置的配置项: CPU_BASELINE CPU_DISPATCH 上面这两个我设置成SSE_3,其他选项未尝试,比如不设置。 CMAKE_OSX_ARCHITECTURES:x86_64;arm64 WITH_IPP:不勾选 2,contrib库的添加: 第一次…...

Python 向IP地址发送字符串

Python 向IP地址发送字符串 在网络编程中,使得不同设备间能够进行数据传输是一项基本任务。Python提供了强大的库,帮助开发者轻松地实现这种通信。本文将介绍如何使用Python通过UDP协议向特定的IP地址发送字符串信息。 UDP协议简介 UDP(用…...

上升响应式Web设计:纯HTML和CSS的实现技巧-1

响应式Web设计(Responsive Web Design, RWD)是一种旨在确保网站在不同设备和屏幕尺寸下都能良好运行的网页设计策略。通过纯HTML和CSS实现响应式设计,主要依赖于媒体查询(Media Queries)、灵活的布局、可伸缩的图片和字…...

利用java结合python实现gis在线绘图,主要技术java+python+matlab+idw+Kriging

主要技术javapythonmatlabidwKriging** GIS中的等值面和等高线绘图主要用于表达连续空间数据的分布情况,特别适用于需要展示三维空间中某个变量随位置变化的应用场景。 具体来说,以下是一些适合使用GIS等值面和等高线绘图的场景: 地形与地貌…...

Android全面解析之context机制(三): 从源码角度分析context创建流程(下)

前言 前面已经讲了什么是context以及从源码角度分析context创建流程(上)。限于篇幅把四大组件中的广播和内容提供器的context获取流程放在了这篇文章。广播和内容提供器并不是context家族里的一员,所以他们本身并不是context,因而…...

执行docker compose命令出现 Additional property include is not allowed

问题背景 在由docker-compose.yml的文件目录下执行命令 docker compose up -d 出现错误 Additional ininoperty include is not allowed 原因 我的docker-compose.yml 文件中出现了include标签旧版本的docker-compose 不支持此标签 解决办法 下载支持的docker-compose 解决…...

STM32通过I2C硬件读写MPU6050

目录 STM32通过I2C硬件读写MPU6050 1. STM32的I2C外设简介 2. STM32的I2C基本框图 3. STIM32硬件I2C主机发送流程 10位地址与7位地址的区别 7位主机发送的时序流程 7位主机接收的时序流程 4. STM32硬件与软件的波形对比 5. STM32配置硬件I2C外设流程 6. STM32的I2C.h…...

ubuntu2204-中文输入法-pycharm-python-django开发环境搭建

文章目录 1.系统常用设置1.1.安装中文输入法1.2.配置输入法1.3.卸载输入法1.4.配置镜像源2.java安装3.pycharm安装与启动4.卸载ubuntu2204默认版本5.安装Anaconda5.1.安装软件依赖包5.2.安装命令5.3.激活安装5.4.常用命令5.5.修改默认启动源6.安装mysql6.1.离线安装mysql6.2.在…...

【学习笔记】Matlab和python双语言的学习(一元线性回归)

文章目录 前言一、一元线性回归回归分析的一般步骤一元线性回归的基本形式回归方程参数的最小二乘法估计对回归方程的各种检验估计标准误差的计算回归直线的拟合优度判定系数显著性检验 二、示例三、代码实现----Matlab四、代码实现----python回归系数的置信区间公式残差的置信…...

LeetCode //C - 316. Remove Duplicate Letters

316. Remove Duplicate Letters Given a string s, remove duplicate letters so that every letter appears once and only once. You must make sure your result is the smallest in lexicographical order among all possible results. Example 1: Input: s “bcabc”…...

【ARM+Codesys 客户案例 】RK3568/A40i/STM32+CODESYS在工厂自动化中的应用:PCB板焊接机

现代化生产中,电子元件通常会使用自动化设备来进行生产,例如像PCB(印刷电路板)的组装。但是生产过程中也会面临一些问题,类似于如何解决在PCB板上牢固、精准地安装各种组件呢?IBL Lttechnik GmbH公司的CM80…...

【二分查找】--- 初阶题目赏析

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏: 算法Joureny 上篇我们讲解了关于二分的朴素模板和边界模板,本篇博客我们试着运用这些模板。 🏠 搜索插入位置 📌 题目…...

【PostgreSQL003】PostgreSQL数据表空间膨胀,磁盘爆满,应用宕机(经验总结,已更新)

1.一直以来想写下基于PostgreSQL的系列文章,作为较火的数据ETL工具,也是日常项目开发中常用的一款工具,最近刚好挤时间梳理、总结下这块儿的知识体系。 2.熟悉、梳理、总结下PostgreSQL数据库相关知识体系。空间膨胀(主键、外键、…...

C语言第20天笔记

文件操作 概述 什么是 文件 文件时保存在外存储器上(一般代指磁盘,也可以是U盘、移动硬盘等)的数据的集合。 文件操作体现在哪几个方面 1. 文件内容的读取 2. 文件内容的写入 数据的读取和写入可被视为针对文件进行输入和输出的操作&a…...

为什么穷大方

为什么有些人明明很穷,却非常的大方呢? 因为他们认知太低,根本不懂钱的重要性,总是想着及时享乐,所以一年到头也存不了什么钱。等到家人孩子需要用钱的时候,什么也拿不出来,还到处去求人。 而真…...

HiveSQL实战——大数据开发面试高频SQL题

查询每个区域的男女用户数 0 问题描述 每个区域内男生、女生分别有多少个 1 数据准备 use wxthive; create table t1_stu_table (id int,name string,class string,sex string ); insert overwrite table t1_stu_table values(4,张文华,二区,男),(3,李思雨,一区,女),(1…...

RabbitMQ集群 - 普通集群搭建、宕机情况

文章目录 RabbitMQ 普通集群概述集群搭建数据准备启动容器宕机情况 RabbitMQ 普通集群 概述 1)普通模式中所有节点没有主从之分,所有节点的元数据(交换机、队列、绑定等)都是一致的. 例如只要有任意一个节点上面 新增交换机&…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

蓝桥杯 冶炼金属

原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG

TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码:HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...