MySQL中处理JSON数据一文即可入门

news/2024/10/15 19:33:31/

MySQL从5.7版本开始原生支持JSON数据类型,使得在数据库中存储和查询JSON数据变得更加方便和高效。下面将介绍如何在MySQL中处理JSON数据,包括如何存储、查询和修改JSON数据。

1. 创建包含JSON列的表

首先,你需要创建一个表,该表包含一个或多个JSON类型的列。例如:

CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100),attributes JSON
);

在这个例子中,attributes列被指定为JSON类型,可以存储任何有效的JSON数据。

2. 插入JSON数据

向包含JSON列的表中插入数据时,可以直接将JSON数据作为字符串插入。例如:

INSERT INTO users (name, attributes) VALUES
('John Doe', '{"age": 30, "city": "New York"}');

3. 查询JSON数据

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

  • JSON_EXTRACT(json_doc, path[, path] ...) 或简写为 ->> 操作符:用于从JSON文档中提取数据。
  • JSON_KEYS(json_doc, path):返回JSON对象中的键数组。
  • JSON_CONTAINS(json_doc, val[, path]):检查JSON文档是否包含特定值。
  • JSON_SEARCH(json_doc, one_or_all, search_str[, escape_char[, path] ...]):搜索JSON文档中的值并返回路径。
示例查询:
-- 使用 JSON_EXTRACT 提取数据
SELECT name, JSON_EXTRACT(attributes, '$.age') AS age FROM users;--输出:
+----------+-----+
| name     | age |
+----------+-----+
| John Doe | 30  |
+----------+-----+
1 row in set (0.03 sec)-- 使用 ->> 提取数据(更简洁)
SELECT name, attributes->>'$.age' AS age FROM users;
--输出:
+----------+-----+
| name     | age |
+----------+-----+
| John Doe | 30  |
+----------+-----+
1 row in set (0.03 sec)
-- 检查attributes中是否包含特定城市
SELECT * FROM users WHERE JSON_CONTAINS(attributes, '"New York"', '$.city');
--输出:
+----+----------+---------------------------------+
| id | name     | attributes                      |
+----+----------+---------------------------------+
|  1 | John Doe | {"age": 30, "city": "New York"} |
+----+----------+---------------------------------+
1 row in set (0.03 sec)
-- 搜索特定城市并返回用户的名字
SELECT name FROM users WHERE JSON_SEARCH(attributes, 'one', 'New York', NULL, '$.city') IS NOT NULL;
-- 输出:
+----------+
| name     |
+----------+
| John Doe |
+----------+
1 row in set (0.03 sec)

4. 修改JSON数据

你可以使用JSON_SET, JSON_REPLACE, JSON_INSERT, JSON_REMOVE等函数来修改JSON数据。

示例修改:
-- 添加或更新JSON数据
UPDATE users SET attributes = JSON_SET(attributes, '$.age', 31) WHERE id = 1;-- 插入新值,如果路径不存在
UPDATE users SET attributes = JSON_INSERT(attributes, '$.email', 'john.doe@example.com') WHERE id = 1;-- 移除JSON数据
UPDATE users SET attributes = JSON_REMOVE(attributes, '$.city') WHERE id = 1;

5. 注意事项

  • 虽然在MySQL中处理JSON数据很方便,但应谨慎使用,特别是在需要频繁更新或查询JSON字段内部数据的场景下。性能可能会受到影响,因为JSON数据的查询通常比传统的关系型数据查询要慢。
  • 尽可能使用索引来优化查询性能,特别是在查询JSON数据的条件列上。
  • 考虑将频繁查询的JSON字段中的数据拆分为单独的表列,以提高查询效率。

通过以上介绍,你应该已经了解了如何在MySQL中处理JSON数据。这将帮助你更有效地利用MySQL数据库来存储和查询复杂的数据结构。


http://www.ppmy.cn/news/1512562.html

相关文章

招商期货:以超融合支撑期货重要业务,承载80%信创系统

招商期货有限公司(以下简称“招商期货”)成立于 1993 年,是招商证券股份有限公司的全资子公司,注册资本 35.98 亿元,是中国首批券商全资控股期货公司。 随着数字化进程快速推进、交易模式不断创新,系统建设…

Postman断言

目录 概述 断言工作原理 常用断言方法 Status code: Code is 200 Status code: Successful POST request Status code: Code name has string Response body: Contains string Response body: JSON value check Response body: ls equal to a string Response headers…

实现多goroutine之间的发布和订阅

实现多goroutine之间的发布和订阅 一、实现思路 一个发布者,三个订阅者发布者需要跟每个订阅者之间,都要建立一个chan调用发布方法后,三个订阅者都能收到发布的信息在发布和接收之间,增加暂停,使运行结果更加直观 二…

在亚马逊云科技上对Stable Diffusion模型提示词、输出图像内容进行安全审核

项目简介: 小李哥将继续每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿AI技术解决方案,帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS AI最佳实践,并应用到自己的日常工作里。 本次介绍的是如何在亚马逊云科技机器学习托…

仿Muduo库实现高并发服务器——LoopThreadPool模块

这个模块需要具备那些基础知识。 线程创建相关操作,锁,条件变量。 设置线程数量: _thread_count 是线程池中,记录线程数量的成员。 创建线程池: 上图就是线程池的创建,将线程与EventLoop对象 通过数组下…

docker部署MySQL5.7.43并使用python脚本插入数据——实施案例

目录 一、配置docker环境 1. 阿里云镜像站配置docker环境 1. 安装必要的一些系统工具 ​编辑 2. 添加软件源信息 ​编辑 3. 修改 Docker 的 YUM 仓库配置文件,将 Docker 官方仓库的地址替换为阿里云的镜像源,以提高下载速度。 4. 更新并安装Dock…

ChatGLM-4-9b-chat本地化|天翼云GPU上vLLM本地部署开源模型完整攻略

“ 拥有一个私有化的领先国产开源大模型?本文详细介绍了如何在天翼云GPU上使用vLLM部署ChatGLM-4-9b-chat本地化模型的完整攻略,助您快速上手。” 01 — vLLM 本来打算用ollama在GPU服务器上部署开源模型GLM4,在之前文章有部署教程&#xff1…

【Linux线程】线程的深度解析(线程是什么?线程与进程区别是什么?)

目录 一、前言 二、 什么是线程 💧线程的引入💧 💧线程的基本概念 💧 💧线程的理解 💧 💧进程与线程的关系💧 💧程序如何划分(重拾页表、见一下LWP&…