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/8/6 8:32:19 阅读更多 →
LLM+MF推荐系统:用大模型做重排实现可解释推荐

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

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

2026/8/6 12:05:59 阅读更多 →
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/8/6 10:34:37 阅读更多 →

最新新闻

044、SimAMv2无参注意力在YOLOv12中的复现——基于神经科学启发的轻量涨点方案

044、SimAMv2无参注意力在YOLOv12中的复现——基于神经科学启发的轻量涨点方案

044、SimAMv2无参注意力在YOLOv12中的复现——基于神经科学启发的轻量涨点方案 兄弟们,今天这篇咱们聊点硬核又省事的东西。上周有个做工业质检的哥们儿找我,说他的YOLOv12在钢材表面缺陷数据集上跑到了mAP 78.4,死活上不去了,加了…

2026/8/6 13:31:32 阅读更多 →
SuperRDP终极教程:3步解锁Windows远程桌面完整功能,告别并发限制

SuperRDP终极教程:3步解锁Windows远程桌面完整功能,告别并发限制

SuperRDP终极教程:3步解锁Windows远程桌面完整功能,告别并发限制 【免费下载链接】SuperRDP Super RDPWrap 项目地址: https://gitcode.com/gh_mirrors/su/SuperRDP SuperRDP是一款基于RDPWrap技术深度优化的开源工具,专门解决Windows…

2026/8/6 13:31:32 阅读更多 →
app建设网站:中小企业数字化转型的真实困境与破局之路,你真的准备好了吗

app建设网站:中小企业数字化转型的真实困境与破局之路,你真的准备好了吗

在这个人人都谈“数字化转型”的年代,很多老板或者项目负责人找到我的时候,第一句话往往带着一种既兴奋又迷茫的语气:“老师,我想做一个App,顺便帮我把网站也弄好,我要那个APP建设网站一体化,能不能快速上线,能不能帮我引流?”听到这种问题,我心里总会咯噔一下。不是…

2026/8/6 13:31:32 阅读更多 →
Cloudflare OS 全新开源版本发布:为组织打造定制化工作平台!

Cloudflare OS 全新开源版本发布:为组织打造定制化工作平台!

Cloudflare OS:面向代理、应用和工作的开放平台每个组织都有自己的使命和存在的理由。组织将这一使命,连同其术语、流程、系统、标准和工作方式传递给员工。而员工则结合自身经验,朝着使命的方向努力工作。工作形式多种多样,从代码…

2026/8/6 13:31:32 阅读更多 →
DailyTech-20260805

DailyTech-20260805

每日科技资讯 — 2026年8月5日(周三)聚焦科技圈、数码圈重要动态。📌 摘要速览 🤖 AI:阿里千问发布 Qwen3.8-Max(2.4T 参数、首开 Max 权重)并上线 Qwen-Image-3.0 图像模型;OpenAI …

2026/8/6 13:31:32 阅读更多 →
最小可运行示例:用 curl 跑通疯狂星期四文案 API

最小可运行示例:用 curl 跑通疯狂星期四文案 API

从一个最小问题说起 很多 API 教程的问题在于:示例代码依赖了框架、环境变量、封装好的 SDK,读者照抄后依然跑不通,最后只能在评论区反复追问。 所谓「最小可运行示例」,评判标准只有一条——把一段命令原样复制到终端&#xff0c…

2026/8/6 13:30:31 阅读更多 →

日新闻

深入解析LimboAI C++内核:架构设计与性能优化实战

深入解析LimboAI C++内核:架构设计与性能优化实战

1. 项目概述:为什么我们需要深入LimboAI的C内核?如果你是一名使用Godot引擎的游戏开发者,尤其是对AI行为逻辑有较高要求的项目,那么LimboAI这个名字你大概率不会陌生。它作为Godot 4生态中一个备受瞩目的行为树与状态机插件&#…

2026/8/6 0:00:06 阅读更多 →
Unity 2D游戏敌人AI系统:基于PlayMaker状态机与2D Toolkit的实战开发

Unity 2D游戏敌人AI系统:基于PlayMaker状态机与2D Toolkit的实战开发

1. 项目概述与核心思路大家好,我是老张,一个在游戏开发一线摸爬滚打了十多年的老码农。今天咱们接着聊《空洞骑士》风格2D动作游戏的Demo制作。上一期我们搭好了基础框架,处理了角色移动和碰撞,这一期,我们要让游戏世界…

2026/8/6 0:00:06 阅读更多 →
被动防火门市场前景发展趋势

被动防火门市场前景发展趋势

被动防火门依靠材质结构、密闭构造阻隔烟火蔓延,无需电控启动,是建筑被动消防系统核心构件,行业依托新规管控、城市更新、工业安全升级迎来稳定扩容,整体朝着合规化、专项化、低碳化、智能化方向发展。现阶段 GB12955‑2024 新版国…

2026/8/6 0:00:06 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/5 15:00:43 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/5 13:13:56 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/5 10:20:36 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/5 23:28:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/5 21:00:14 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/5 23:46:51 阅读更多 →