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

MySQL JSON数据存储结构与操作

MySQL 5.7及以上版本开始支持JSON数据类型,为存储和操作JSON数据提供了便利。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于现代Web应用程序中。本文将详细介绍MySQL中JSON数据的存储结构与操作。

一、JSON数据类型的基本操作

1.1 创建包含JSON字段的表

首先,创建一个包含JSON字段的表。例如,创建一个存储用户信息的表,其中 details字段为JSON类型。

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

1.2 插入JSON数据

插入数据时,可以直接插入JSON格式的数据。

INSERT INTO users (name, details) VALUES 
('John Doe', '{"age": 30, "email": "john.doe@example.com", "address": {"city": "New York", "zip": "10001"}}'),
('Jane Smith', '{"age": 25, "email": "jane.smith@example.com", "address": {"city": "Los Angeles", "zip": "90001"}}');

1.3 查询JSON数据

可以使用 ->>运算符提取JSON字段中的值。例如,查询所有用户的邮箱。

SELECT name, details->>'$.email' AS email FROM users;

1.4 更新JSON数据

使用 JSON_SET函数可以更新JSON数据。例如,更新John Doe的城市为Boston。

UPDATE users SET details = JSON_SET(details, '$.address.city', 'Boston') WHERE name = 'John Doe';

1.5 删除JSON数据

使用 JSON_REMOVE函数可以删除JSON数据中的某个键。例如,删除Jane Smith的地址信息。

UPDATE users SET details = JSON_REMOVE(details, '$.address') WHERE name = 'Jane Smith';
​

二、JSON函数与操作

2.1 JSON_EXTRACT

JSON_EXTRACT用于从JSON文档中提取数据。等价于 ->操作符。

SELECT JSON_EXTRACT(details, '$.email') AS email FROM users;

2.2 JSON_ARRAY

JSON_ARRAY用于创建JSON数组。

SELECT JSON_ARRAY('apple', 'banana', 'cherry') AS fruits;
​

2.3 JSON_OBJECT

JSON_OBJECT用于创建JSON对象。

SELECT JSON_OBJECT('name', 'John Doe', 'age', 30) AS person;
​

2.4 JSON_CONTAINS

JSON_CONTAINS用于检查JSON文档中是否包含某个值。

SELECT name FROM users WHERE JSON_CONTAINS(details, '{"city": "New York"}', '$.address');
​

2.5 JSON_MERGE

JSON_MERGE用于合并两个JSON文档。

SELECT JSON_MERGE('{"name": "John"}', '{"age": 30}') AS merged_json;
​

2.6 JSON_TYPE

JSON_TYPE返回JSON值的数据类型。

SELECT JSON_TYPE('{"name": "John"}') AS json_type;
​

三、JSON索引与优化

3.1 创建虚拟列与索引

为了提高查询性能,可以创建虚拟列并对其建立索引。例如,为用户表中的邮箱创建虚拟列和索引。

ALTER TABLE users ADD COLUMN email VARCHAR(255) GENERATED ALWAYS AS (details->>'$.email') STORED;
CREATE INDEX idx_email ON users (email);
​

3.2 使用全文索引

对于包含大量文本的JSON字段,可以使用全文索引来提高查询性能。

ALTER TABLE users ADD FULLTEXT(details);
SELECT * FROM users WHERE MATCH(details) AGAINST('New York');
​
http://www.xdnf.cn/news/715321.html

相关文章:

  • 几款主流V30、V60、V90相机SD卡的评测(索尼、闪迪、三星、雷克沙)
  • ultraiso制作U盘镜像 针对win2012及win2016等需要特殊处理
  • Python训练营打卡 Day39
  • 4 串电池保护芯片创芯微CM1341-DAT使用介绍
  • 板凳-------Mysql cookbook学习 (八--2)
  • [yolov11改进系列]基于yolov11引入倒置残差块块注意力机制iEMA的python源码+训练源码
  • 面向低端设备的移动网页调试策略:WebDebugX 在性能瓶颈分析中的应用
  • 1 µs = 10⁻⁶ s
  • 目标检测预测框置信度(Confidence Score)计算方式
  • ComfyUI+阿里Wan2.1+内网穿透技术:本地AI视频生成系统搭建实战
  • postgresql 流复制中指定同步的用户
  • AI如何让你的智能设备电池更“聪明”?——Python实现智能电池管理
  • 共享内存(SharedArrayBuffer)的使用,以及兼容性情况
  • 【Python零基础入门系列】第5篇:Python 中的函数、模块和文件读写
  • C语言——获取变量所在地址(uint8和uint32的区别)
  • 【Linux网络篇】:初步理解应用层协议以及何为序列化和反序列化
  • Go语言中flag包的用法详解
  • 23、Swift框架微调实战(3)-Qwen2.5-VL-7B LORA微调OCR数据集
  • 计算机视觉---YOLOv4
  • jdk 国内下载镜像站
  • 数据结构 -- 判断正误
  • 微信小程序学习目录
  • 《合同管理系统业务设计》系列三:合同创建与起草流程
  • Cursor系列(1):Cursor安装、虚拟环境
  • 每日算法-250529
  • 【深度学习】13. 图神经网络GCN,Spatial Approach, Spectral Approach
  • 【C语言练习】071. 理解C语言中的信号处理
  • 华为OD机试真题——求最多可以派出多少支队伍(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
  • Android高级开发第一篇 - JNI(初级入门篇)
  • function reorder in binary