通俗易懂:MySQL如何支持JSON数据类型?提供一个使用案例。

news/2024/4/29 10:07:18/文章来源:https://blog.csdn.net/pengweid/article/details/137053510

MySQL从5.7.8版本开始正式引入了原生的JSON数据类型,用来支持JSON格式数据的存储、查询和操作。MySQL的JSON数据类型提供了以下几个关键特性:

1. 存储

MySQL中的JSON列可以存储符合JSON格式规范的数据,存储的内容会被MySQL转换为内部格式,从而提高存储效率,并且能进行有效的验证确保存储的文档是合法的JSON。

2. 验证

MySQL会对插入到JSON列的数据自动进行格式验证,如果数据不是有效的JSON格式,则会抛出错误,阻止非法数据的插入。

3. 查询

MySQL提供了一系列的JSON函数,使得用户能够方便地查询和操作JSON列中的数据。例如:

- `JSON_EXTRACT(json_column, '$.key')` 可以提取JSON对象中的指定键值。

- `JSON_SET(json_column, '$.key', 'value')` 可以设置或更新JSON对象中的键值。

- `JSON_REMOVE(json_column, '$.key')` 删除JSON对象中的指定键值。

4. 更新优化

MySQL 8.0增强了对JSON类型的优化,允许局部更新,即仅更新JSON文档中的某个部分,不需要替换整个文档。

5. 索引

在MySQL 8.0.17及之后的版本中,InnoDB存储引擎支持在JSON数组的元素上创建多值索引,这大大提高了含有JSON数组列查询性能。

使用案例

假设有一个用户表 `users`,其中有一列 `preferences` 存储用户的个人偏好,采用JSON格式:

CREATE TABLE users (

user_id INT AUTO_INCREMENT PRIMARY KEY,

username VARCHAR(50),

preferences JSON

);

-- 插入带有JSON数据的记录

INSERT INTO users (username, preferences)

VALUES ('Alice', '{"color": "blue", "notifications": ["email", "sms"], "language": "en"}');

-- 查询用户偏好中的颜色

SELECT JSON_EXTRACT(preferences, '$.color') AS favorite_color

FROM users

WHERE user_id = 1;

-- 更新用户偏好

UPDATE users

SET preferences = JSON_SET(preferences, '$.language', 'fr')

WHERE user_id = 1;

-- 删除某一偏好项

UPDATE users

SET preferences = JSON_REMOVE(preferences, '$.notifications[0]')

WHERE user_id = 1;

在这个例子中,`preferences` 列是一个JSON类型,可以存储各种用户偏好设置。通过JSON函数,可以轻松插入、查询和更新这些数据。同时,在满足条件的情况下,还可以利用MySQL提供的索引功能,优化对JSON数据的检索性能。当然,让我们进一步简化并用生活中的例子来说明MySQL查询优化器的工作原理。

假设光头强和熊二在图书馆工作,他们需要帮助读者找到五本特定主题且评分最高的图书。

-

查询优化器

光头强

-

执行计划

查找图书的方法

-

SQL查询

找书任务

情况一

图书馆有电子目录系统(索引),可以根据主题快速定位到相关书籍区域,并且每本书都有详细的评分记录在卡片上(索引包含评分信息)。

光头强可以选择:

方法A:先通过电子目录锁定主题对应的书架,然后逐个查看书上的评分卡片,选出评分最高的五本。

情况二

没有电子目录,只有纸质目录,而且只记录了书名和作者,评分信息不在目录上。

光头强只能选择:

方法B:先查阅纸质目录找到所有该主题的书,然后一本一本翻开阅读书中附带的评分页,对比后选出评分最高的五本。

光头强(查询优化器)会选择他认为最快捷的方式来完成任务。如果有高效的索引可用,他会优先考虑利用索引来减少查找时间(对应于数据库中利用索引进行查询)。若无有效索引,则可能不得不采取全量搜索的方式(对应于数据库中的全表扫描)。

通过这个例子,我们可以更直观地理解查询优化器是如何基于现有资源(索引、统计数据等)来选择最优的执行计划,以便高效地完成查询请求的。

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

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

相关文章

常用类(String)

目录 字符串相关的类1.1、String类的概述1.2、理解String的不可变性1.3、String不同实例化方式的对比1.4、String不同拼接操作的对比1.4.1、String使用陷阱 1.5、String的常用方法1.6、String与基本数据类型、包装类、char[]、byte[]的转换1.7、StringBuffer和StringBuilder的介…

衰老抑制剂原知因起源金NMN热销,“海弗里克极限”将被打破?

美国著名生物学家列奥纳多 海弗里克 , 在 1961 年研究人类胎儿的细胞群体分裂次数时提出了著名的 " 海弗里克极限 " 理论。该理论认为 , 正常细胞分裂的周期是 2-3 年 , 分裂次数大概是 50 次 , 得出人类的极限寿命高达 150 岁。半个世纪后 , 世界上最长寿的人 , 打…

文献速递:文献速递:基于SAM的医学图像分割--SAM-Med3D

Title 题目 SAM-Med3D 01 文献速递介绍 医学图像分析已成为现代医疗保健不可或缺的基石,辅助诊断、治疗计划和进一步的医学研究]。在这一领域中最重要的挑战之一是精确分割体积医学图像。尽管众多方法在一系列目标上展现了值得称赞的有效性,但现有的…

3月份的倒数第二个周末有感

坐在图书馆的那一刻,忽然感觉时间的节奏开始放缓。今天周末因为我们两都有任务需要完成,所以就选了嘉定图书馆,不得不说嘉定新城远香湖附近的图书馆真的很有感觉。然我不经意回想起学校的时光,那是多么美好且短暂的时光。凝视着窗…

创建多节点 k8s 集群

主机IP系统master192.168.2.15ubuntu20.04 x64 2C 4GWorker1192.168.2.16ubuntu20.04 x64 2C 4GWorker1192.168.2.18ubuntu20.04 x64 2C 4G 使用 iterm2 连接四台服务器 command shift i 同时操作 初始化配置 关闭防火墙 systemctl stop firewalld systemctl disable firewa…

Pixelmator Pro:专业级图像编辑,触手可及mac版

Pixelmator Pro是一款功能强大的图像编辑软件,专为Mac操作系统设计。它拥有直观的界面和丰富的工具,能够满足用户各种图像处理需求。 Pixelmator Pro软件获取 首先,Pixelmator Pro支持多种文件格式,包括JPEG、PNG、GIF、BMP、TIF…

springcloud微服务项目,通过gateway+nacos实现灰度发布(系统不停机升级)

一、背景 灰度发布的目的是保证系统的高可用,不停机,提升用户体验。在微服务系统中,原有系统不下线,新版系统与原有系统同时在线,通过访问权重在线实时配置,可以让少量用户先应用新版本功能,如…

2024软件设计师备考讲义——(8)

操作系统 〇、操作系统概述 OS作用、OS特征、OS分类 作用:提高计算机效率,人机交互友好特征:并发性、共享性、虚拟性、不确定性分类:批处理、分时、实时、网络、分布式、微机嵌入式操作系统:微型化、可定制、实时性、可…

Nuxt(组件-基础使用)

1.根目录下新建compoents目录&#xff0c;必须是这个名字 2.封装组件 示例代码如下&#xff08;Header.vue&#xff09;&#xff1a; <template><div><NuxtLink to"/"> 首页 </NuxtLink><NuxtLink to"/about"> 关于 </…

创龙教仪基于瑞芯微3568的ARM Cortex A-55教学实验箱 适用于人工智能 传感器 物联网等领域

适用课程 Cortex-A55 ARM嵌入式实验箱主要用于《ARM 系统开发》、《ARM 应用开发》《物联网通信技术》、《嵌入式系统设计》、《移动互联网技术》、《无线传感器网络》、《物联网设计方法与应用》、《人工智能》等课程。 适用专业 Cortex-A55 ARM嵌入式实验箱主要面向电子信…

20232831 2023-2024-2 《网络攻防实践》第4次作业

目录 20232831 2023-2024-2 《网络攻防实践》第4次作业1.实验内容2.实验过程&#xff08;1&#xff09;ARP缓存欺骗攻击&#xff08;2&#xff09;ICMP重定向攻击&#xff08;3&#xff09;SYN Flood攻击&#xff08;4&#xff09;TCP RST攻击&#xff08;5&#xff09;TCP会话…

vue3 渲染一个后端返回的图片字段渲染、table表格内放置图片

一、后端直接返回图片url 当图片字段接口直接返回的是图片url&#xff0c;可以直接放到img标签上 <img v-if"thumbLoader" class"r-image-loader-thumb" :src"resUrl" /> 二、当图片字段接口直接返回的是图片Id 那么就需要去拼一下图片…

正则表达式 vs. 字符串处理:解析优势与劣势

title: 正则表达式 vs. 字符串处理&#xff1a;解析优势与劣势 date: 2024/3/27 15:58:40 updated: 2024/3/27 15:58:40 tags: 正则起源正则原理模式匹配优劣分析文本处理性能比较编程应用 1. 正则表达式起源与演变 正则表达式&#xff08;Regular Expression&#xff09;最早…

【媒体邀约】选择媒体公关公司邀约媒体有哪些优势

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 选择媒体公关公司邀约媒体具有以下优势&#xff1a; 丰富的媒体资源&#xff1a;媒体公关公司通常与各大主流媒体、行业媒体、网络媒体等有着长期合作关系&#xff0c;拥有丰富的媒体资…

鸿蒙OS开发实例:【工具类封装-页面路由】

import common from ohos.app.ability.common; import router from ohos.router 封装app内的页面之间跳转、app与app之间的跳转工具类 【使用要求】 DevEco Studio 3.1.1 Release api 9 【使用示例】 import MyRouterUtil from ../common/utils/MyRouterUtil MyRouterUtil…

c++指针最全总结(附源码和详细总结)

目录 哈喽&#xff0c;我又来啦&#x1f604; 指针是什么&#xff1f;What is a pointer&#xff1f; 简单点说 一级指针的定义 指针的赋值 指针的输出 二级指针的定义 简单说 二级指针的赋值 二级指针的输出 改变一级指针指向 二级指针的步长 改变n-1级指针的指向 …

R语言赋值符号<-、=、->、<<-、->>的使用与区别

R语言的赋值符号有&#xff1c;-、、-&#xff1e;、&#xff1c;&#xff1c;-、-&#xff1e;&#xff1e;六种&#xff0c;它们的使用与区别如下: <-’&#xff1a;最常用的赋值符号。它将右侧表达式的值赋给左侧的变量&#xff0c;像一个向左的箭头。例如&#xff0c;x …

Spring Boot 实现定时任务动态管理

前言 本文主要介绍了SpringBoot架构下动态定时任务的使用&#xff0c;定时任务表达式配置在数据库中&#xff0c;通过反射执行到目标方法。 Quartz Quartz 是一个开源的作业调度框架,支持分布式定时任务&#xff0c;Quartz定时任务据我了解可分为Trigger&#xff08;触发器&…

JavaEE企业开发新技术4

2.16 模拟Spring IOC容器功能-1 2.17 模拟Spring IOC容器功能-2 什么是IOC&#xff1f; 控制反转&#xff0c;把对象创建和对象之间的调用过程交给Spring框架进行管理使用IOC的目的&#xff1a;为了耦合度降低 解释&#xff1a; 模仿 IOC容器的功能&#xff0c;我们利用 Map…

计算机网络:物理层 - 传输媒体

计算机网络&#xff1a;物理层 - 传输媒体 物理层基本概念导引型传输媒体同轴电缆双绞线光纤 非引导型传输媒体无线电波微波红外线 物理层基本概念 在计算机网络中用来连接各种网络设备的传输媒体&#xff0c;种类众多&#xff0c;大致可以分为两类&#xff0c;一类是导引型传…