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

MySQL颠覆版系列————MySQL新特性(开启数据库的新纪元)上篇

文章目录

  • 前言
  • 一、窗口函数(Window Functions)
    • 1.1 窗口函数概念
    • 1.2 常见的窗口函数
  • 二、公用表表达式(Common Table Expressions, CTEs)
    • 2.1 公用表表达式的概念
    • 2.2 常见的公用表表达式
  • 三、JSON增强
    • 3.1 JSON增强的概念
    • 3.2 常见的JSON增强
  • 四、Invisible Indexes
    • 4.1 Invisible Indexes的概念
    • 4.2 常见的Invisible Indexes
  • 献给读者


在这里插入图片描述
在这里插入图片描述


前言

在这个信息爆炸的时代,数据已经成为我们生活中不可或缺的一部分。无论你是社交媒体的重度使用者、企业中的数据分析员,还是软件开发工程师,都不可避免地与各种各样的数据库打交道。而在众多的关系型数据库管理系统(RDBMS)中,MySQL以其开源性、易用性和强大的功能脱颖而出,成为了最受欢迎的选择之一。

但你知道吗?MySQL不仅仅是一个传统的数据库系统;它一直在进化,不断地引入令人兴奋的新特性和改进,以适应日益增长的数据需求和技术挑战。想象一下,就像一艘宇宙飞船,在浩瀚的数据星空中航行,每一次升级都是对引擎的一次优化,让它飞得更快、更远。而MySQL 8.x版本系列就像是给这艘飞船装上了超级推进器,准备带你进入一个全新的探索之旅。

从过去到现在
回顾历史,MySQL自1995年首次发布以来,已经走过了漫长的路程。最初,它的目标是提供一个快速、可靠且易于使用的数据库解决方案。随着时间的发展,MySQL逐渐成长为支持全球数百万应用的核心技术之一。然而,随着互联网的发展和大数据时代的到来,传统的关系型数据库面临着前所未有的挑战。用户需要处理更大规模的数据集,执行更加复杂的查询操作,并确保数据的安全性和一致性。面对这些需求,MySQL没有停滞不前,而是选择了拥抱变化,不断创新。

迈向未来
那么,MySQL是如何应对这些挑战的呢?答案在于其不断推出的创新特性。例如,MySQL 8.0引入了窗口函数(Window Functions),这一功能让开发者能够以前所未有的方式分析数据。你可以轻松地计算排名、移动平均值或累计总和,而无需编写复杂的子查询。这就像是为你的SQL工具箱添加了一把瑞士军刀,让你在处理复杂业务逻辑时游刃有余。

不仅如此,MySQL还增强了对JSON的支持。在当今的世界里,非结构化数据越来越普遍,无论是日志文件、社交媒体帖子还是物联网设备生成的信息,都可以方便地存储和查询。通过使用JSON数据类型和相关函数,你可以高效地管理和检索半结构化数据,为应用程序带来更大的灵活性。

此外,MySQL 8.x还带来了许多其他激动人心的功能,比如公用表表达式(Common Table Expressions, CTEs)、持久化的全局变量设置、角色管理以及资源管理等。每一个新特性都是为了帮助你更好地管理和利用数据,提升工作效率的同时也保障了系统的稳定性和安全性。

探索之旅
在这篇博客文章中,我们将一起深入探讨MySQL 8.x版本中的一些关键新特性。我们将揭开它们背后的秘密,了解如何将这些强大的工具应用到实际工作中去。无论是想要提高查询性能,还是寻求更高级别的安全措施,亦或是希望简化日常维护任务,你都能在这里找到答案。

让我们开始这段奇妙的旅程吧!准备好迎接那些改变游戏规则的技术,学习如何充分利用MySQL提供的最新功能来解决现实世界中的问题。记住,最好的还在后面——因为正如科技界常说的那样,“唯一不变的就是变化本身”。而MySQL正是这场变革中最耀眼的明星之一,引领着我们走向一个充满无限可能的未来。所以,系好安全带,打开你的想象力,跟我们一起踏上这条通往数据巅峰的道路吧!

MySQL不断演进,引入了许多新特性和改进。截至2025年初,MySQL的最新稳定版本中包含了一系列增强功能和新增特性。本文我们将详细介绍MySQL中的一些重要新属性和功能。

一、窗口函数(Window Functions)

从MySQL 8.0开始支持窗口函数,这极大地增强了SQL查询的能力,允许执行复杂的分析操作,如排名、移动平均等,而无需使用子查询或连接。在SQL查询中,窗口函数(Window Functions)提供了一种强大的方式来执行复杂的分析操作。与聚合函数不同,窗口函数不会将行分组为单一的输出行;相反,它们允许我们在不减少原始行数的情况下对数据集进行计算。这种特性使得窗口函数非常适合于需要在结果集中保留所有记录的同时执行排序、排名或累计计算的任务。

1.1 窗口函数概念

窗口函数的核心在于“窗口”,即一个逻辑分区或子集,定义了函数应用的数据范围。每个窗口由三个主要部分组成:

  1. PARTITION BY:类似于GROUP BY,但它不会减少结果集中的行数。它用于定义窗口内的逻辑分区。
  2. ORDER BY:指定窗口内数据的排序顺序。
  3. 窗口框架:定义了窗口的具体范围,如当前行之前的所有行、之后的所有行或者两者之间的任意组合。

1.2 常见的窗口函数

  1. 排名函数
  • ROW_NUMBER(): 为窗口内的每一行分配唯一的序号。
  • RANK(): 根据指定的排序条件给每一行分配排名,相同的值会有相同的排名,但会跳过后续的排名。
  • DENSE_RANK(): 类似于RANK(),但是不会跳过后续的排名。
SELECT employee_id, department, salary,ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC) AS row_num,RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS rank,DENSE_RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS dense_rank
FROM employees;

此查询返回每个部门内按薪资降序排列的员工信息,并附带每种排名类型的数值。

  1. 聚合函数作为窗口函数
    除了排名函数外,常见的聚合函数也可以用作窗口函数,如SUM(), AVG(), COUNT(), MIN(), MAX()等。这些函数可以用来计算累积和、移动平均等。
SELECT date,sales,SUM(sales) OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cumulative_sales
FROM daily_sales;

这段代码计算了每天的累计销售额。

  1. NTILE()
    NTILE(n)将结果集划分为n个大致相等的部分,并为每一行分配相应的桶编号。这对于划分数据集特别有用。
SELECT customer_id,purchase_amount,NTILE(4) OVER (ORDER BY purchase_amount DESC) AS quartile
FROM purchases;

二、公用表表达式(Common Table Expressions, CTEs)

公用表表达式(Common Table Expressions,简称CTEs)是SQL中一种非常有用的工具,它提供了一种清晰且可读的方式来定义临时结果集,这些结果集可以在后续的SELECT, INSERT, UPDATE, DELETE语句中引用。CTEs特别适用于需要多次引用相同子查询的情况,或者用于递归查询。

2.1 公用表表达式的概念

  1. 定义
    一个CTE由两部分组成:CTE名称和相应的查询定义。其语法结构如下:
WITH cte_name AS (SELECT column1, column2, ...FROM table_nameWHERE conditions
)
SELECT * FROM cte_name;
  1. 使用场景
  • 简化复杂查询:通过将复杂的查询分解为多个逻辑部分,使整个查询更加易读。
  • 递归查询:处理具有层次结构的数据,如组织结构图、分类树等。
  • 提高代码重用性:避免在同一查询中重复编写相同的子查询。

2.2 常见的公用表表达式

假设我们有一个员工表employees,包含字段employee_id, name, manager_id。我们的目标是从这个表中获取每个员工的名字及其直接经理的名字。

WITH EmployeeCTE AS (SELECT e1.employee_id AS emp_id, e1.name AS emp_name, e2.name AS manager_nameFROM employees e1LEFT JOIN employees e2 ON e1.manager_id = e2.employee_id
)
SELECT * FROM EmployeeCTE;

在这个例子中,EmployeeCTE作为一个临时的结果集,包含了员工及其对应经理的信息。这使得最终的SELECT语句变得非常简洁明了。

三、JSON增强

随着数据类型的多样化,非结构化数据如JSON(JavaScript Object Notation)在现代应用程序中变得越来越重要。MySQL从5.7版本开始支持JSON数据类型,并且在后续的版本中不断增强了对JSON的支持,使得存储、查询和操作JSON数据变得更加高效和便捷。

3.1 JSON增强的概念

在MySQL中,JSON是一种专门用于存储JSON文档的数据类型。与传统的文本存储方式不同,JSON字段不仅能够保持数据的结构完整性,还能利用MySQL提供的内置函数进行高效的查询和修改。

3.2 常见的JSON增强

MySQL提供了丰富的内置函数来处理JSON数据,包括但不限于:

  • 创建和解析JSON:如JSON_OBJECT(), JSON_ARRAY(), JSON_EXTRACT()
  • 修改JSON:如JSON_SET(), JSON_INSERT(), JSON_REPLACE(), JSON_REMOVE()
  • 检查JSON值:如JSON_CONTAINS(), JSON_CONTAINS_PATH()
  • 获取JSON属性:如JSON_KEYS()
INSERT INTO users (name, profile) VALUES ('John Doe', JSON_OBJECT('age', 30, 'email', 'john@example.com'));SELECT JSON_EXTRACT(profile, '$.email') AS email FROM users WHERE name = 'John Doe';

四、Invisible Indexes

在数据库管理中,索引是优化查询性能的关键工具。然而,并非所有的索引都对查询计划有积极的影响。有时候,某些索引可能会导致不必要的开销或干扰优化器的选择,尤其是在进行大规模的数据库重构或者性能调优时。MySQL从8.0版本开始引入了一个非常有用的功能——不可见索引(Invisible Indexes),它允许数据库管理员测试删除索引的影响而不实际移除它们。

4.1 Invisible Indexes的概念

不可见索引是一种特殊的索引类型,它不会被查询优化器考虑用于执行计划。这意味着虽然索引仍然存在于数据库中并且占用存储空间,但它不会影响查询的执行方式。这对于评估索引对查询性能的实际影响特别有用,因为它提供了一种无需永久删除索引来测试其重要性的方法。

4.2 常见的Invisible Indexes

在创建索引时,可以通过指定INVISIBLE关键字将其设为不可见:

CREATE INDEX idx_last_name ON employees (last_name) INVISIBLE;

修改现有索引的可见性

ALTER TABLE employees MODIFY INDEX idx_last_name INVISIBLE;-- 或者将其变回可见
ALTER TABLE employees MODIFY INDEX idx_last_name VISIBLE;

查看索引状态

SELECT table_schema, table_name, index_name, is_visible 
FROM information_schema.statistics 
WHERE table_schema = 'your_database' AND table_name = 'employees';

献给读者


💯 计算机技术的世界浩瀚无垠,充满了无限的可能性和挑战,它不仅是代码与算法的交织,更是梦想与现实的桥梁。无论前方的道路多么崎岖不平,希望你始终能保持那份初心,专注于技术的探索与创新,用每一次的努力和进步书写属于自己的辉煌篇章。

🏰在这个快速发展的数字时代,愿我们都能成为推动科技前行的中坚力量,不忘为何出发,牢记心中那份对技术执着追求的热情。继续前行吧,未来属于那些为之努力奋斗的人们。


亲,码字不易,动动小手,欢迎 点赞 ➕ 收藏,如 🈶 问题请留言(评论),博主看见后一定及时给您答复,💌💌💌


相关文章:

MySQL颠覆版系列————MySQL新特性(开启数据库的新纪元)上篇

文章目录 前言一、窗口函数(Window Functions)1.1 窗口函数概念1.2 常见的窗口函数 二、公用表表达式(Common Table Expressions, CTEs)2.1 公用表表达式的概念2.2 常见的公用表表达式 三、JSON增强3.1 JSON增强的概念3.2 常见的J…...

MySQL 调优:查询慢除了索引还能因为什么?

文章目录 情况一:连接数过小情况二:Buffer Pool 太小 MySQL 查询慢除了索引还能因为什么?MySQL 查询慢,我们一般也会想到是因为索引,但除了索引还有哪些原因会导致数据库查询变慢呢? 以下以 MySQL 中一条 S…...

Java实习生面试题(2025.3.23 be)

一、v-if与v-show的区别 v-show 和 v-if 都是 Vue 中的条件渲染指令,它们的主要区别在于渲染策略:v-if 会根据条件决定是否编译元素,而 v-show 则始终编译元素,只是通过改变 CSS 的 display 属性来控制显示与隐藏。 二、mybatis-…...

如何在百度搜索上删除与自己名字相关的资料

个人信息的网络足迹如同一张无形的网,将我们与世界的每一个角落紧密相连。然而,当某些与自己名字相关的资料不再希望被公众轻易检索到时,如何在百度搜索中有效“隐身”,成为了一个亟待解决的问题。面对复杂多变的网络环境&#xf…...

【C语言】C语言使用随机数srand,rand

C语言使用随机数srand,rand 可直接编译使用&#xff1a; #include <stdio.h> #include <time.h> #include <stdlib.h> #include <unistd.h>/* c语言提供的跟随机数有关的函数:int rand(void);返回值:产生的随机数void srand(unsiqned int seed);参数…...

为容器指定固定IP地址

文章目录 为容器指定固定IP地址可以通过以下步骤实现&#xff0c;适用于Docker环境&#xff1a;**方法一&#xff1a;使用Docker自定义桥接网络****方法二&#xff1a;Docker Compose配置****关键注意事项** 为容器指定固定IP地址可以通过以下步骤实现&#xff0c;适用于Docker…...

kube-score K8S Yaml静态代码分析工具详解

kube-score 是一款专注于 Kubernetes 配置文件的静态代码分析工具&#xff0c;旨在通过自动化检查帮助用户识别资源配置中的潜在问题&#xff0c;并遵循最佳实践以提升集群的安全性、稳定性和性能。以下是其核心功能、使用方法和应用场景的详细解析&#xff1a; 一、核心功能与…...

Spring Boot 整合 Elasticsearch 实践:从入门到上手

引言 Elasticsearch 是一个开源的分布式搜索引擎&#xff0c;广泛用于日志分析、搜索引擎、数据分析等场景。本文将带你通过一步步的教程&#xff0c;在 Spring Boot 项目中整合 Elasticsearch&#xff0c;轻松实现数据存储与查询。 1. 创建 Spring Boot 项目 首先&#xff…...

使用外部事件检测接入 CDH 大数据管理平台告警

CDH 大数据管理平台 CDH&#xff08;Cloudera Distribution Hadoop&#xff09;是一个企业级的大数据平台&#xff0c;由 Cloudera 公司提供&#xff0c;它包含了 Apache Hadoop 生态系统中的多种开源组件&#xff0c;并对其进行了优化和集成&#xff0c;以支持大规模数据存储…...

RabbitMQ八股文

RabbitMQ RabbitMQ 核心概念与组件1. RabbitMQ 核心组件及其作用1.1 生产者&#xff08;Producer&#xff09;1.2 交换机&#xff08;Exchange&#xff09;1.3 队列&#xff08;Queue&#xff09;1.4 绑定&#xff08;Binding&#xff09;1.5 消费者&#xff08;Consumer&#…...

MongoDB(五) - Studio 3T 下载与安装教程

文章目录 前言一、Studio 3T 简介二、下载及安装1. 下载2. 安装 三、使用Studio 3T连接MongoDB 前言 本文旨在全面且深入地为你介绍 Studio 3T。从其丰富的功能特性、跨平台使用的便捷性&#xff0c;到详细的下载安装步骤&#xff0c;以及关键的连接 MongoDB 操作&#xff0c;…...

2025高频面试算法总结篇【链表堆栈队列】

文章目录 直接刷题链接直达反转链表环形链表判断一个序列是否为合理的出栈顺序最长有效括号旋转链表复杂链表的复制约瑟夫环问题滑动窗口最大值 直接刷题链接直达 反转链表 206. 反转链表 环形链表 141. 环形链表142. 环形链表 II 判断一个序列是否为合理的出栈顺序 946.…...

Java主流开发框架之请求响应常用注释

1.RestController 标记一个类为 REST 控制器&#xff0c;处理 HTTP 请求并直接返回数据&#xff08;如 JSON/XML&#xff09;&#xff0c;而不是视图&#xff08;如 HTML&#xff09;&#xff0c;一般是放在类的上边 RestController public class UserController {GetMapping…...

汽车制造MES

一、整体生产工序 整车的车间主要分为4个部分&#xff1a;冲压、焊装、涂装、总装、整车入库 系统架构 二、车间概括 1.冲压车间 2.焊装车间 3.涂装车间 4.总装车间 1.整车装配的部件都要可追溯、数据实时性要求高、涉及分装与总装的协调、物流配送的协调、质量批处理的协调、…...

LeetCode 2643.一最多的行:模拟(更新答案)

【LetMeFly】2643.一最多的行&#xff1a;模拟(更新答案) 力扣题目链接&#xff1a;https://leetcode.cn/problems/row-with-maximum-ones/ 给你一个大小为 m x n 的二进制矩阵 mat &#xff0c;请你找出包含最多 1 的行的下标&#xff08;从 0 开始&#xff09;以及这一行中…...

固定翼无人机姿态和自稳模式

固定翼无人机的‌姿态模式&#xff08;Attitude/Angle Mode&#xff09;‌和‌自稳模式&#xff08;Stabilize Mode&#xff09;‌是两种常见的飞行控制模式&#xff0c;它们在飞控系统介入程度、操作逻辑及适用场景上有显著区别。以下是两者的详细对比及使用指南&#xff1a; …...

K8S中若要挂载其他命名空间中的 Secret

在Kubernetes&#xff08;k8s&#xff09;里&#xff0c;若要挂载其他命名空间中的Secret&#xff0c;你可以通过创建一个 Secret 的 ServiceAccount 和 RoleBinding 来实现对其他命名空间 Secret 的访问&#xff0c;接着在 Pod 中挂载这个 Secret。下面是详细的步骤和示例代码…...

关于Unity的CanvasRenderer报错

MissingReferenceException: The object of type ‘CanvasRenderer’ has been destroyed but you are still trying to access it. Your script should either check if it is null or you should not destroy the object. UnityEngine.UI.GraphicRaycaster.Raycast (UnityEng…...

LangChain组件Tools/Toolkits详解(5)——返回产出artifact

LangChain组件Tools/Toolkits详解(5)——返回产出artifact 本篇摘要14. LangChain组件Tools/Toolkits详解14.5 返回产出artifact14.5.1 定义工具14.5.2 使用ToolCall调用工具14.5.3 与模型一起使用14.5.4 从子例化BaseTool返回参考文献本章目录如下: 《LangChain组件Tools/T…...

信奥赛CSP-J复赛集训(模拟算法专题)(26):P5412 [YNOI2019] 排队

信奥赛CSP-J复赛集训(模拟算法专题)(26):P5412 [YNOI2019] 排队 题目描述 小明所在的班级要举办一场课外活动,在活动开始之前老师告诉小明:“需要把男女生分成两队,并且每一队都要按照身高从矮到高进行排序”。但是由于小明的马虎,没有把老师的安排转达给同学,导致全…...

基于开源模型的微调训练及瘦身打造随身扫描仪方案__用AI把手机变成文字识别小能手

基于开源模型的微调训练及瘦身打造随身扫描仪方案__用AI把手机变成文字识别小能手 一、准备工作&#xff1a;组装你的"数码工具箱" 1. 安装基础工具&#xff08;Python环境&#xff09; 操作步骤&#xff1a; 访问Python官网下载安装包安装时务必勾选Add Python to…...

在 Offset Explorer 中配置多节点 Kafka 集群的详细指南

一、是否需要配置 Zookeeper&#xff1f; Kafka 集群的 Zookeeper 依赖性与版本及运行模式相关&#xff1a; Kafka 版本是否需要 Zookeeper说明0.11.x 及更早版本✅ 必须配置Kafka 完全依赖 Zookeeper 管理元数据2.8 及以下版本✅ 必须配置Kafka 依赖外置或内置的 Zookeeper …...

STM32基础教程——定时器

前言 TIM定时器&#xff08;Timer&#xff09;:STM32的TIM定时器是一种功能强大的外设模块&#xff0c;通过时基单元&#xff08;包含预分频器、计数器和自动重载寄存器&#xff09;实现精准定时和计数功能。其核心原理是&#xff1a;内部时钟&#xff08;CK_INT&#xff09;或…...

深入分析和讲解虚拟化技术原理

随着云计算和大数据技术的飞速发展&#xff0c;虚拟化技术应运而生&#xff0c;成为数据中心和IT基础设施的重要组成部分。本文将深入分析虚拟化的基本原理、主要类型以及在实际应用中的意义。 一、虚拟化技术的定义 虚拟化技术是通过软件将物理硬件资源抽象成虚拟资源的技术&…...

HarmonyOS Next~鸿蒙图形开发技术解析:AREngine与ArkGraphics 2D的核心能力与应用实践

HarmonyOS Next&#xff5e;鸿蒙图形开发技术解析&#xff1a;AREngine与ArkGraphics 2D的核心能力与应用实践 鸿蒙操作系统&#xff08;HarmonyOS&#xff09;在图形开发领域持续创新&#xff0c;其核心图形类Kit——**AREngine&#xff08;增强现实引擎服务&#xff09;与Ar…...

Can通信流程

下面给出一个更详细的 CAN 发送报文的程序流程说明&#xff0c;结合 HAL 库的使用及代码示例&#xff0c;帮助你了解每一步的具体操作和内部原理。 一、系统与外设初始化 1.1 HAL 库初始化 在 main() 函数开头&#xff0c;首先调用 HAL 库初始化函数&#xff1a; HAL_Init()…...

小白闯AI:Llama模型Lora中文微调实战

文章目录 0、缘起一、如何对大模型进行微调二、模型微调实战0、准备环境1、准备数据2、模型微调第一步、获取基础的预训练模型第二步:预处理数据集第三步:进行模型微调第四步:将微调后的模型保存到本地4、模型验证5、Ollama集成部署6、结果测试三、使用总结AI是什么?他应该…...

rip 协议详细介绍

以下是关于 RIP&#xff08;Routing Information Protocol&#xff0c;路由信息协议&#xff09; 的详细介绍&#xff0c;涵盖其工作原理、版本演进、配置方法、优缺点及实际应用场景。 1. RIP 协议概述 类型&#xff1a;动态路由协议&#xff0c;基于距离矢量算法&#xff08…...

同旺科技USB to SPI 适配器 ---- 指令之间延时功能

所需设备&#xff1a; 内附链接 1、同旺科技USB to SPI 适配器 1、指令之间需要延时发送怎么办&#xff1f;循环过程需要延时怎么办&#xff1f;如何定时发送&#xff1f;现在这些都可以轻松解决&#xff1b; 2、只要在 “发送数据” 栏的Delay单元格里面输入相应的延迟时间就…...

2024年MathorCup数学建模D题量子计算在矿山设备配置及运营中的建模应用解题文档与程序

2024年第十四届MathorCup高校数学建模挑战赛 D题 量子计算在矿山设备配置及运营中的建模应用 原题再现&#xff1a; 随着智能技术的发展&#xff0c;智慧矿山的概念越来越受到重视。越来越多的设备供应商正在向智慧矿山整体解决方案供应商转型&#xff0c;是否具备提供整体解…...