MySQL 进阶篇 —— 事务 / 外键 / 索引 / 高级查询
MySQL 进阶内容涵盖事务、主外键、索引及高级查询技巧一、事务TCL1.1 什么是事务一组 SQL 操作的逻辑单元要么全部成功要么全部失败。1.2 ACID 特性特性说明原子性所有操作全部成功或全部失败一致性事务前后数据完整性一致隔离性多个事务并发互不影响持久性事务提交后永久保存1.3 事务操作语句语句作用begin开始事务commit提交事务永久保存rollback回滚事务撤销全部操作savepoint 名称设置保存点rollback to 名称回滚到指定保存点多个窗口可多事务并发但单窗口只能有一个事务。事务结束标志是rollback或commit。下一个事务开启会隐式提交上一个事务。1.4 事务示例-- 前提只有 InnoDB 引擎支持事务createtableaccounts(idintunsignedprimarykeyauto_increment,namevarchar(20),balancedecimal(10,2))engineInnoDBdefaultcharsetutf8mb4;insertintoaccountsvalues(1,张三,1000),(2,李四,0);-- 正常提交begin;updateaccountssetbalancebalance-500whereid1;updateaccountssetbalancebalance500whereid2;commit;-- 回滚撤销begin;updateaccountssetbalancebalance-200whereid1;updateaccountssetbalancebalance200whereid2;rollback;-- 保存点回滚begin;updateaccountssetbalance500whereid1;savepointsp1;updateaccountssetbalance500whereid2;rollbacktosp1;commit;二、主键与外键2.1 主键primary key特点说明字段值必须唯一不允许重复字段值不可为空not null一张表仅一个主键可单字段或组合字段自动生成唯一索引创建主键时自动附带2.2 外键foreign key引用另一张表的主键用于建立表间关联。特点说明字段值可以不唯一允许重复字段值可以为空允许null一张表可有多个外键自动生成普通索引创建外键时自动附带2.3 创建外键失败常见原因关联的两个字段数据类型不匹配子表已有存量数据违反外键约束被引用的主表主键缺少配套索引2.4 级联规则on delete / on update规则行为on delete cascade主表删除子表关联数据同步删除on delete set null主表删除子表外键置 null需允许 null默认不写规则子表有关联数据时禁止删除主表-- 主表createtableproducts_2(pidintunsignedprimarykeyauto_increment,pnamevarchar(40),pricedecimal(10,2));-- 子表级联删除createtableorders_2(oidintunsignedprimarykeyauto_increment,pidintunsigned,buy_numint,foreignkeyfk_pid(pid)referencesproducts_2(pid)ondeletecascadeonupdatecascade);-- 子表置空处理pid 必须允许 nullcreatetableorders_3(oidintunsignedprimarykeyauto_increment,pidintunsignednull,buy_numint,foreignkeyfk_pid2(pid)referencesproducts_2(pid)ondeletesetnull);三、索引3.1 什么是索引类似书籍目录作用是加快数据查询速度。有索引无索引直接定位数据类似查目录逐行全表扫描查询效率大幅提升数据量大时极慢3.2 优缺点优点缺点大幅提高查询速度占用额外磁盘空间减少磁盘 IO增删改需同步维护索引降低写入性能避免全表扫描数据越大索引占用越多3.3 存储结构分类类型适用场景B 树索引范围查询、in查询默认哈希索引仅支持精准等值查询全文索引文本模糊like检索3.4 功能分类类型特点语法普通索引允许重复、允许 nullcreate index idx_name on 表(字段);唯一索引值必须唯一、允许 nullcreate unique index idx_name on 表(字段);主键索引唯一 非空一张表仅一个创建主键自动生成组合索引多字段联合create index idx_a_b on 表(字段1,字段2);全文索引长文本检索create fulltext index idx_text on 表(字段);-- 创建普通索引createindexidx_pnameonproducts(pname);-- 创建唯一索引createuniqueindexidx_priceonproducts(price);-- 创建组合索引createindexidx_name_stockonproducts(name,stock);-- 查看索引showindexfromproducts;showcreatetableproducts;-- 删除索引dropindexidx_pnameonproducts;MySQL 不支持直接修改索引需要先删除旧索引再重新创建新索引。四、高级 DQL4.1 条件判断case when类似编程中的 if-else根据条件生成新列selectname,price,casewhenprice500then低价whenpricebetween500and3000then中价else高价endas价格等级fromproducts;4.2 空值处理ifnullselectifnull(name,无名商品)as商品名称,pricefromproducts;4.3 字符串函数selectconcat(name, - ,city)as顾客信息fromcustomers;selectname,char_length(name)as名称长度fromproducts;4.4 分页查询limit offset-- limit 每页条数 offset 跳过条数select*fromproductsorderbypricedesclimit3offset0;-- 第 1 页select*fromproductsorderbypricedesclimit3offset3;-- 第 2 页4.5 exists-- 有下过单的顾客select*fromcustomersascwhereexists(select1fromordersasowhereo.customer_idc.id);-- 从未被购买过的商品select*fromproductsaspwherenotexists(select1fromorder_itemsasoiwhereoi.product_idp.id);4.6 union 合并结果集selectnameas名称fromcustomersunionselectnameas名称fromproducts;-- union all 保留重复更快selectnameas名称fromcustomersunionallselectnameas名称fromproducts;4.7 窗口函数window function在不改变行数的情况下对分组内数据排序、排名、累计-- row_number为每行赋予唯一连续排名selectname,price,row_number()over(orderbypricedesc)as价格排名fromproducts;-- rank相同值并列排名会跳过后续序号如 1,1,3selectname,price,rank()over(orderbypricedesc)as价格排名fromproducts;-- dense_rank相同值并列排名不跳过后续序号如 1,1,2selectname,price,dense_rank()over(orderbypricedesc)as价格排名fromproducts;五、总结分类核心操作关键字/语法事务开启/提交/回滚begin/commit/rollback/savepoint事务ACID原子性、一致性、隔离性、持久性外键级联删除on delete cascade外键置空处理on delete set null索引普通/唯一/组合/全文create index/create unique index/create fulltext index索引查看/删除show index from/drop index高级 DQL条件判断case when ... then ... else ... end高级 DQL空值处理ifnull()高级 DQL字符串函数concat()/char_length()高级 DQL分页limit ... offset ...高级 DQLexistsexists/not exists高级 DQL合并结果集union/union all高级 DQL窗口函数row_number()/rank()/dense_rank()/over

相关新闻

SpringBoot整合ActiveMQ实现JMS消息队列实战

SpringBoot整合ActiveMQ实现JMS消息队列实战

1. SpringBoot与JMS集成实战:ActiveMQ深度整合指南在分布式系统架构中,异步消息传递是解耦服务的关键技术。最近在电商项目中需要实现订单状态变更通知,我选择了SpringBootJMSActiveMQ这套经典组合。这种方案不仅开发效率高,而且A…

2026/10/17 4:51:40 阅读更多 →
LLM+MF推荐系统:用大模型做重排实现可解释推荐

LLM+MF推荐系统:用大模型做重排实现可解释推荐

1. 项目概述:当推荐系统开始“开口说话”你有没有遇到过这样的情况:刷短视频时,平台突然给你推了一部冷门纪录片,理由是“你最近看了三部犯罪片”;或者电商App在你刚搜索完“婴儿湿疹膏”后,首页立刻弹出“…

2026/10/17 4:51:46 阅读更多 →
Kimi K3发布冲击美国AI高价模式,Anthropic无奈让Claude Fable 5永久可用

Kimi K3发布冲击美国AI高价模式,Anthropic无奈让Claude Fable 5永久可用

Claude Fable 5“反转”永久可用 就在刚刚,Anthropic官宣Claude Fable 5永久可用。从7月20日开始,它将直接包含在所有的Max和Team Premium订阅方案中,不过额度被限制在50%。而Pro和Team标准版用户,不仅能继续通过使用额度访问Fabl…

2026/10/17 4:52:11 阅读更多 →

最新新闻

生鲜配送商城APP实战复盘:从架构设计到履约链路与避坑指南

生鲜配送商城APP实战复盘:从架构设计到履约链路与避坑指南

1. 项目概述与核心价值先聊个现象:生鲜配送这几年看着热闹,真正做过的人才知道,这个赛道远不是"把菜送到家"这么简单。相比标品电商,生鲜的核心难点在于"鲜"和"快",这两个字考验的不是某…

2026/10/18 13:47:07 阅读更多 →
博客内容生成规范与合规边界说明

博客内容生成规范与合规边界说明

我无法根据当前输入内容生成符合要求的博文。原因如下:项目标题仅为“rea”,无明确语义,既非完整单词(如“real”“react”“realm”等常见缩写或拼写变体),也未提供上下文指向具体领域(编程、设…

2026/10/18 13:47:07 阅读更多 →
科创项目数据可视化与分析平台:从选题到部署答辩的全流程实战

科创项目数据可视化与分析平台:从选题到部署答辩的全流程实战

说实话,现在毕设题目越来越卷,既要体现工作量,又要保证做完,还得在答辩时讲出东西来。“科创项目数据可视化与分析平台”这个方向,这几年我见过不少同学在做,它属于典型的不踩雷选题:业务场景非…

2026/10/18 13:47:07 阅读更多 →
手写响应式状态管理库rea:核心设计与实战解析

手写响应式状态管理库rea:核心设计与实战解析

其实“rea”这个标题,我第一次看到的时候也愣了一下——就三个字母,没有任何上下文。但放在这几年做前端基础架构的语境里,我很快就明白过来,这多半是一个内部状态管理模块的项目代号。恰好我们团队之前也经历过一段“状态管理大乱…

2026/10/18 13:47:07 阅读更多 →
MySQL数据库和表操作详解:从建库到删表的完整指南

MySQL数据库和表操作详解:从建库到删表的完整指南

MySQL这门课我接触了十年,最早也是从“数据库和表的基本操作”入门的。说实话,刚开始觉得无非就是CREATE、DROP、ALTER那几条命令,后来在真实项目里踩了无数坑,才明白基础操作里藏着大量细节,比如字符集选错导致乱码、…

2026/10/18 13:47:07 阅读更多 →
飞凌 OK3576-C 实测:Debian 13 上的八核 CPU、eMMC、GPU 和 NPU,实际表现怎么样?

飞凌 OK3576-C 实测:Debian 13 上的八核 CPU、eMMC、GPU 和 NPU,实际表现怎么样?

拿到一块嵌入式开发板,我一般会先确认系统能否正常启动和使用,再考虑跑分。芯片参数很好查,但装上 Debian 以后,软件包是否齐全、编译是不是够快、eMMC 读写会不会拖后腿,以及 GPU 和 NPU 能否真正运行程序&#xff0c…

2026/10/18 13:46:06 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →