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

MySQL 核心进阶:开窗函数、事务、视图、索引与范式

MySQL 核心进阶开窗函数、事务、视图、索引与范式在掌握基本的多表查询后要想真正高效地使用 MySQL就必须理解数据库的设计规范范式、保证数据一致性的事务机制、优化查询性能的索引、简化复杂查询的视图以及强化分析能力的开窗函数。本文系统梳理这五大核心主题帮助读者迈入高阶 MySQL 技能领域。一、数据库设计的规范——范式为了减少数据冗余、避免更新异常关系型数据库在设计表结构时应遵循一定的规范称为范式。常见的三种范式层层递进后一个范式都必须满足前一个范式的要求。1. 第一范式1NF字段不可再分表中的每个字段都应是最小的原子单位不能包含子字段。反例学生ID姓名联系方式电话邮箱1张三123456, zhangemail.com“联系方式”可再细分为“电话”和“邮箱”不符合 1NF。修正后满足 1NF学生ID姓名电话邮箱1张三123456zhangemail.com2. 第二范式2NF消除部分依赖在满足 1NF 的基础上非主键字段必须完全依赖于全部主键而不是主键的一部分。这主要在存在复合主键的表中出现问题。反例复合主键学生ID 课程ID学生ID课程ID学生姓名成绩1C01张三85这里“学生姓名”只依赖于“学生ID”而不依赖于“课程ID”即部分依赖不符合 2NF。修正拆分为学生表学生ID, 学生姓名和成绩表学生ID, 课程ID, 成绩。3. 第三范式3NF消除传递依赖在满足 2NF 的基础上非主键列不能依赖于其他非主键列即不能有传递依赖所有非主键列都必须直接依赖于主键。反例员工ID部门ID部门名称101D1研发部“部门名称”依赖于“部门ID”非主键列而“部门ID”又依赖于主键“员工ID”形成传递依赖。修正拆分为员工表员工ID, 部门ID和部门表部门ID, 部门名称。二、开窗函数——数据分析利器开窗函数窗口函数可以在不改变原始行数的情况下为每一行计算基于窗口范围的聚合或排序值这是普通分组查询无法做到的。基本语法窗口函数OVER([PARTITIONBY分区列]-- 类似分组但不合并行[ORDERBY排序列]-- 定义窗口内的顺序)PARTITION BY将数据划分成多个窗口窗口函数在每个窗口内独立计算。ORDER BY定义了窗口内数据的顺序对于排名和偏移函数至关重要。1. 排名函数ROW_NUMBER()生成连续行号即使排序值相同行号也不同。RANK()跳跃排名相同值获得相同排名后续排名跳过。DENSE_RANK()连续排名相同值获得相同排名后续排名不跳过。示例SELECTname,score,ROW_NUMBER()OVER(ORDERBYscoreDESC)ASrow_num,RANK()OVER(ORDERBYscoreDESC)ASrnk,DENSE_RANK()OVER(ORDERBYscoreDESC)ASdense_rnkFROMstudents;若分数为 95, 90, 90, 85则ROW_NUMBER→ 1,2,3,4RANK→ 1,2,2,4DENSE_RANK→ 1,2,2,32. 偏移函数LAG(列, n)返回当前行之前的第 n 行值。LEAD(列, n)返回当前行之后的第 n 行值。常用于计算环比、同比变化。SELECTmonth,revenue,LAG(revenue,1)OVER(ORDERBYmonth)ASprev_month_revenueFROMsales;3. 聚合窗口函数常见的聚合函数SUM()、AVG()、MAX()、MIN()、COUNT()都可以作为窗口函数使用计算窗口内的累积值或移动平均值。SELECTname,score,SUM(score)OVER(ORDERBYid)AScumulative_scoreFROMstudents;三、事务——保证数据一致性的基石事务是一组不可再分的 SQL 操作要么全部执行成功要么全部失败回滚。事务必须具备 ACID 四大特性。ACID 特性原子性Atomicity事务内的所有操作要么全部成功要么全部撤销。一致性Consistency事务前后数据库的完整性约束不被破坏。隔离性Isolation多个事务并发执行时彼此之间互不干扰。持久性Durability事务一旦提交对数据的修改就是永久的即使系统故障也不会丢失。事务控制语句-- 开始事务STARTTRANSACTION;-- 或 BEGIN-- 执行一系列操作...UPDATEaccountsSETbalancebalance-100WHEREid1;UPDATEaccountsSETbalancebalance100WHEREid2;-- 如果一切正常提交修改COMMIT;-- 如果出现异常回滚到事务开始前的状态ROLLBACK;并发事务带来的问题问题描述脏读一个事务读到了另一个事务未提交的数据可能被回滚。不可重复读同一个事务内两次读取同一数据结果不同因其他事务修改并提交。幻读同一个事务内两次查询的记录行数不同因其他事务插入或删除了数据。MySQL 通过不同的事务隔离级别READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE以及锁机制来解决这些问题。锁机制简介共享锁S锁读锁多个事务可同时加 S 锁读取数据但不能修改。排他锁X锁写锁一旦加锁其他事务不能加任何锁读或写。行级锁只锁定某几行并发度高InnoDB 支持。表级锁锁定整张表开销小但并发度低MyISAM 使用。四、索引——查询优化的利器索引就像书的目录能够帮助数据库引擎快速定位数据避免全表扫描从而大幅提升查询效率。常用索引类型类型特点主键索引由主键自动创建唯一且非空可快速按主键检索。普通索引仅用于加速查询无唯一性限制。唯一索引保证列值唯一允许 NULL 值但通常只有一个 NULL组合索引多个列组合成一个索引遵循最左前缀原则。最左前缀原则使用组合索引时如果查询条件从索引的最左列开始并且不跳过中间的列则可以使用该索引。例如索引(a,b,c)能用于a、a,b或a,b,c的查询但不能用于单独的b或c。创建索引示例-- 普通索引CREATEINDEXidx_nameONusers(name);-- 唯一索引CREATEUNIQUEINDEXidx_emailONusers(email);-- 组合索引CREATEINDEXidx_age_cityONusers(age,city);五、视图——虚拟表的妙用视图是基于 SQL 查询语句的虚拟表本身不存储数据只保存查询定义。对视图的查询最终会被转换为对底层基表的查询。创建视图CREATEVIEWview_nameASSELECT字段...FROM表WHERE条件;示例-- 创建一个只包含活跃用户的视图CREATEVIEWactive_usersASSELECTid,name,emailFROMusersWHEREstatusactive;视图的作用简化复杂查询将复杂的多表连接、聚合查询保存为视图方便重复使用。增强安全性隐藏敏感列或行让用户只能访问视图中的数据而非原始表。逻辑独立性底层表结构变化时可以通过修改视图定义来保持对外接口不变而不必修改所有用到该查询的应用代码。注意事项视图主要用于查询对视图的 INSERT、UPDATE、DELETE 有较多限制尤其当视图涉及多表、聚合、分组操作时。通常建议只通过视图读数据保证安全与稳定。小结本文深入介绍了 MySQL 中的五大核心概念范式通过 1NF、2NF、3NF 设计无冗余、无异常的表结构。开窗函数使用 OVER 子句灵活实现分区排名、偏移分析和累积计算。事务利用 ACID 与隔离级别保证数据一致性并通过锁机制解决并发问题。索引合理设计索引主键、唯一、普通、组合提升查询效率注意最左前缀。视图封装复杂 SQL 为虚拟表提高代码复用性和安全性。这些知识是数据库开发与调优的基础建议结合动手实操加深理解。受篇幅所限每种机制的高级用法如事务隔离级别的具体演示、索引的 EXPLAIN 使用、窗口函数 frame 定义等可查阅官方文档进一步研究。

相关文章:

MySQL 核心进阶:开窗函数、事务、视图、索引与范式

MySQL 核心进阶:开窗函数、事务、视图、索引与范式 在掌握基本的多表查询后,要想真正高效地使用 MySQL,就必须理解数据库的设计规范(范式)、保证数据一致性的事务机制、优化查询性能的索引、简化复杂查询的视图&#x…...

FF14过场动画跳过插件:3分钟快速配置完全指南

FF14过场动画跳过插件:3分钟快速配置完全指南 【免费下载链接】FFXIV_ACT_CutsceneSkip 项目地址: https://gitcode.com/gh_mirrors/ff/FFXIV_ACT_CutsceneSkip 还在为《最终幻想14》副本中重复的过场动画浪费时间吗?FFXIV_ACT_CutsceneSkip插件…...

多表关联大平层转JSON树形结构

比如把这种平层数据转化为下面这种树形结构树 [{"id": 2,"parentId": null,"name": "有声书","type": "category","children": [{"id": 1,"parentId": 2,"name": "…...

自动驾驶/机器人定位必知:ECEF、ENU、UTM坐标系到底该怎么选?一篇讲清应用场景

自动驾驶与机器人定位:ECEF、ENU、UTM坐标系工程选型指南 当你在深夜调试一台自动驾驶车辆的定位模块时,突然发现GPS数据在ENU坐标系下表现良好,但切换到UTM后却出现了微妙的偏移——这种场景对机器人算法工程师来说再熟悉不过。坐标系选择不…...

Sa-Token v.. 发布 ,正式支持 Spring Boot 、新增 Jackson/Snack 插件适配

先回顾:三次握手(建立连接)核心流程(实际版) 为了让挥手流程衔接更顺畅,咱们先快速回顾三次握手的实际核心,避免上下文脱节: 第一步(客户端→服务器)&#xf…...

量子计算流体动力学:原理、挑战与噪声缓解策略

1. 量子计算流体动力学概述量子计算流体动力学(QCFD)是近年来兴起的前沿交叉领域,它试图利用量子计算机的独特优势来解决传统CFD方法面临的"维数灾难"问题。在经典计算机上,直接数值模拟(DNS)需要网格分辨率达到Kolmogo…...

Win11Debloat:3步彻底优化Windows系统性能与隐私设置

Win11Debloat:3步彻底优化Windows系统性能与隐私设置 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and cus…...

Python自动化脚本并发控制实战

想同时处理1000个任务,却担心内存爆炸?想让下载速度翻倍,又怕被服务器封IP?本文详细介绍Python中的并发编程技术——从threading到asyncio,从进程池到协程,让你轻松掌握高并发场景下的Python自动化脚本开发。 什么时候需要并发 并发编程不是银弹,滥用反而会让代码更复…...

每日60秒读懂世界:2026年4月28日|劳动表彰、工业利润、消费回暖、新能源突破与全球局势

🔥个人主页:杨利杰YJlio❄️个人专栏:《Sysinternals实战教程》《Windows PowerShell 实战》《WINDOWS教程》《IOS教程》《微信助手》《锤子助手》 《Python》 《Kali Linux》 《那些年未解决的Windows疑难杂症》🌟 让复杂的事情更…...

NEO-F10N-00B,实现米级精度并提供安全GNSS的无线模块

简介今天我要向大家介绍的是 u-blox 的无线模块——NEO-F10N-00B。它基于 u-blox F10 双频 GNSS 技术,利用 L1/L5 频段并采用专有的双频多径抑制技术,在城市环境中能够提供可靠的米级定位精度。该模块具备卓越的射频抗干扰能力,支持安全启动、…...

Anaconda环境下的忍者像素绘卷高级调参指南

Anaconda环境下的忍者像素绘卷高级调参指南 1. 环境准备与模型部署 在开始调参之前,我们需要确保环境配置正确。Anaconda作为Python环境管理工具,能有效隔离不同项目的依赖关系。 首先通过Anaconda Navigator或命令行创建一个新的Python环境&#xff…...

别再只用CNN当判别器了!试试用U-Net给GAN做‘像素级’体检,效果提升太明显

用U-Net重构GAN判别器:实现像素级图像生成的秘密武器 在图像生成领域,我们常常陷入一个怪圈——生成器越来越复杂,但判别器却十年如一日地使用着相同的CNN架构。这就像用体温计给病人做全身CT扫描,只能给出整体"发烧与否&quo…...

PrintExp隐藏技巧:用好‘参考线’和‘墨量统计’,让你的UV打印精度与成本控制提升一个档次

PrintExp隐藏技巧:用好‘参考线’和‘墨量统计’,让你的UV打印精度与成本控制提升一个档次 在UV打印领域,精度和成本控制往往是决定项目成败的关键因素。许多用户在使用PrintExp时,仅仅停留在基础功能层面,却忽略了软件…...

你还在用 Snipe-IT?一个更好用的国产替代来了

🍊 西柚 Ciyo 资产管理系统 v0.3 更新日志 本次 v0.3 版本围绕系统核心能力与实际使用反馈进行了集中优化,重点提升了岗位逻辑、数据管理能力与系统安全性,并进一步夯实了后续扩展能力的基础。 🚀 核心更新内容 🧩 岗…...

extract-video-ppt:一站式智能视频内容提取的革命性解决方案

extract-video-ppt:一站式智能视频内容提取的革命性解决方案 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 在数字化学习与知识传播的时代,视频已成为信息传…...

Elasticsearch性能优化:JVM GC调优全攻略,彻底解决集群卡顿、吞吐量下降问题

Elasticsearch性能优化:JVM GC调优全攻略,彻底解决集群卡顿、吞吐量下降问题前言一、为什么 ES GC 如此关键?1.1 ES 内存结构特点1.2 GC 异常导致的生产问题1.3 ES GC 优化整体流程图二、Elasticsearch JVM GC 基础原理2.1 ES 默认 GC 算法2.…...

VLC-Qt深度解析:Qt应用中的专业视频播放方案

Qt自带的QMediaPlayer不够用?深入VLC-Qt源码,解锁专业级视频播放的全部能力 一、VLC-Qt概述 VLC-Qt是libVLC的Qt封装库,将强大的VLC播放引擎集成到Qt应用中。相比Qt原生QMediaPlayer,VLC-Qt提供了更强大的解码能力和更丰富的控制…...

别只用来关梯度了!torch.no_grad()的3个隐藏用法与常见误区盘点

别只用来关梯度了!torch.no_grad()的3个隐藏用法与常见误区盘点 在PyTorch的日常使用中,torch.no_grad()可能是最容易被低估的上下文管理器之一。大多数开发者仅仅把它当作关闭梯度计算的开关,却不知道这个简单的工具背后隐藏着诸多高级用法和…...

数据结构——栈和队列的相互模拟

栈:只能一端进行插入和删除,具有先进后出的特点队列:一端进行插入一端进行删除,具有先进先出的特点1.两个栈来模拟一个队列:此时我们将第一个栈称为S1,将第二个栈称为S2。思路:入队:…...

IT疑难杂症诊疗室:快速解决技术难题

以下是一篇关于“IT疑难杂症诊疗室”的技术文章大纲。该大纲旨在帮助读者系统性地诊断和解决IT常见问题,内容结构清晰,分为引言、问题分类、诊断方法、解决方案、预防措施和结论等部分。大纲设计基于真实IT支持经验,确保实用性和可操作性。1.…...

2026年最后的内存池升级窗口期已开启!错过本次,你的订单匹配引擎将无法通过中证协FPGA协同验证

更多请点击: https://intelliparadigm.com 第一章:2026年中证协FPGA协同验证对内存池的硬性技术要求 为满足中证协《2026年证券期货行业FPGA加速验证规范(V3.2)》强制条款,FPGA协同验证平台中的内存池必须在硬件抽象层…...

KMS_VL_ALL_AIO:3分钟彻底解决Windows和Office激活难题的终极方案

KMS_VL_ALL_AIO:3分钟彻底解决Windows和Office激活难题的终极方案 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统频繁弹出激活提示而烦恼吗?Office文档…...

车载Java微服务架构崩塌前夜:当Android Automotive与QNX Hypervisor共存时,你必须立即重构的4个IPC通信层

更多请点击: https://intelliparadigm.com 第一章:车载Java微服务架构崩塌前夜:当Android Automotive与QNX Hypervisor共存时,你必须立即重构的4个IPC通信层 在混合车载操作系统环境中,Android Automotive&#xff0…...

【信创验收倒计时】:Java系统通过等保2.0+国密SM2/SM4+中间件适配的9项必检清单

更多请点击: https://intelliparadigm.com 第一章:信创验收背景与Java系统国产化适配总体要求 在国家信息技术应用创新战略持续深化的背景下,信创项目验收已从“能用”全面转向“好用、安全、可控”。Java 系统作为政务、金融、能源等关键领…...

为什么你的Docker AI沙箱无法通过等保2.0三级认证?4类强制隔离缺口+3份可审计的auditd策略模板

更多请点击: https://intelliparadigm.com 第一章:Docker Sandbox 运行 AI 代码隔离技术 性能调优指南 Docker Sandbox 为 AI 模型推理与训练脚本提供了轻量级、可复现的隔离环境,但默认配置常导致 GPU 利用率偏低、内存抖动明显或 I/O 瓶颈…...

告别‘炼丹’低效!手把手教你用TinyViT的‘稀疏软标签’实现快速模型蒸馏

突破计算瓶颈:TinyViT稀疏软标签蒸馏实战指南 在模型压缩领域,知识蒸馏一直是个让人又爱又恨的技术。它能将大模型的知识精华提炼给小模型,但传统方法需要反复调用庞大的教师模型,这种"炼丹"过程不仅耗时耗力&#xff0…...

Stata实战:用estat vif和collin命令搞定多重共线性诊断(附完整代码)

Stata实战:多重共线性诊断的完整解决方案与深度解析 在实证研究过程中,我们常常会遇到一个令人头疼的问题——模型结果看起来不错,但某些自变量的系数符号与理论预期相反,或者统计显著性忽高忽低。这很可能就是多重共线性在作祟。…...

3个超实用技巧:让Mem Reduct内存清理工具完美适配中文环境

3个超实用技巧:让Mem Reduct内存清理工具完美适配中文环境 【免费下载链接】memreduct Lightweight real-time memory management application to monitor and clean system memory on your computer. 项目地址: https://gitcode.com/gh_mirrors/me/memreduct …...

AIGC工具平台-LessonPPTCapCut课件制作

课程制作常需要反复准备模板、素材和剪映草稿目录,手工整理流程繁琐,也容易出现路径和模板错误。 LessonPPTCapCut 用于根据课程信息和模板生成课件结果或剪映草稿,支持配置管理、模板选择、课件制作和运行日志。 文章目录模块定位项目配置项…...

别再租GPU烧钱了!用Colab免费GPU+公开数据集,30分钟跑通YOLOv8商品识别模型

零成本玩转YOLOv8:Colab免费GPU公开数据集实战商品识别 在计算机视觉领域,YOLOv8作为目标检测的标杆算法,其应用场景早已从安防监控延伸到零售行业。想象一下,当你走进一家无人便利店,摄像头瞬间识别出你手中的商品并自…...