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

MySQL 第七天:基础回顾 + 锁机制深度解析(附实战 SQL + 高频面试题)

承接上一篇《SQL 核心语法进阶 & 索引入门》,今天我们深入 MySQL 事务与锁的底层实现,夯实基础、备战面试。

一、今日学习目标

1.MySQL 基础回顾:事务四大特性、隔离级别、锁的基本分类

2.锁机制核心:行锁 / 表锁、共享锁 / 排他锁、意向锁、Gap 锁、Next-Key Lock

3.实战 SQL:锁场景模拟、事务隔离级别测试

4.高频面试题:覆盖锁、事务、并发控制的经典考点

二、MySQL 基础回顾(必背)

1. 事务四大特性(ACID)

原子性(Atomicity):事务要么全部执行,要么全部回滚(由 Undo Log 保证)
一致性(Consistency):事务前后数据完整性不变(由业务逻辑 + 数据库约束共同保证)
隔离性(Isolation):多个并发事务互不干扰(由锁 + MVCC 共同保证)
持久性(Durability):事务提交后数据永久保存(由 Redo Log 保证)

2. 事务隔离级别(InnoDB 支持)

隔离级别 脏读 不可重复读 幻读 实现机制
READ UNCOMMITTED 无锁
READ COMMITTED MVCC
REPEATABLE READ(默认) ✅(InnoDB 已解决) MVCC + Next-Key Lock
SERIALIZABLE 全表加锁

三、锁机制核心解析

1. 锁的分类

按粒度分

  • 行锁:锁定单行记录,并发度高(仅 InnoDB 支持)

  • 表锁:锁定整张表,并发度低(MyISAM/InnoDB 都支持)

按兼容性分

  • 共享锁(S 锁):读锁,多个事务可同时加 S 锁,与 X 锁互斥

  • 排他锁(X 锁):写锁,独占锁,与所有其他锁互斥

按意向分

  • 意向共享锁(IS):事务准备给行加 S 锁前,先给表加 IS 锁

  • 意向排他锁(IX):事务准备给行加 X 锁前,先给表加 IX 锁

2. InnoDB 行锁实现

  • 记录锁(Record Lock):锁定单个索引记录

  • 间隙锁(Gap Lock):锁定索引之间的间隙,防止幻读

  • Next-Key Lock:记录锁 + 间隙锁,是 InnoDB 在 REPEATABLE READ 隔离级别下解决幻读的核心机制

四、实战 SQL 演练

1. 事务隔离级别测试

-- 1. 查看当前隔离级别
SELECT @@transaction_isolation;-- 2. 设置会话级隔离级别(测试用)
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;-- 3. 模拟脏读/不可重复读场景
-- 事务A
BEGIN;
SELECT * FROM account WHERE id = 1; -- 初始余额 1000
-- 事务B
BEGIN;
UPDATE account SET balance = balance - 100 WHERE id = 1;
-- 事务A再次查询(RC级别会读到未提交数据,RR级别不会)
SELECT * FROM account WHERE id = 1;
-- 事务B回滚
ROLLBACK;
-- 事务A结束
COMMIT;

2. 锁场景模拟

-- 1. 加共享锁(读锁)
BEGIN;
SELECT * FROM account WHERE id = 1 LOCK IN SHARE MODE; -- 加S锁
-- 其他事务可加S锁,但不能加X锁
-- 事务B:SELECT * FROM account WHERE id = 1 LOCK IN SHARE MODE; -- 成功
-- 事务B:UPDATE account SET balance = balance - 100 WHERE id = 1; -- 阻塞
COMMIT;-- 2. 加排他锁(写锁)
BEGIN;
SELECT * FROM account WHERE id = 1 FOR UPDATE; -- 加X锁
-- 其他事务无法加任何锁,读写都会阻塞
COMMIT;-- 3. 查看锁信息
SELECT OBJECT_NAME,LOCK_TYPE,LOCK_MODE,LOCK_STATUS,LOCK_DATA
FROM performance_schema.data_locks;

五、高频面试题(附答案)

1. 事务相关

Q:什么是脏读、不可重复读、幻读?

  • 脏读:读到其他事务未提交的数据

  • 不可重复读:同一事务内多次查询结果不一致(其他事务修改并提交)

  • 幻读:同一事务内多次查询行数不一致(其他事务插入 / 删除并提交)

Q:InnoDB 如何解决幻读?

  • 核心:Next-Key Lock(记录锁 + 间隙锁),锁定索引区间,防止其他事务插入新记录

  • 注意:仅在 REPEATABLE READ 隔离级别下生效

2. 锁相关

Q:InnoDB 行锁是加在索引上还是数据上?

核心:Next-Key Lock(记录锁 + 间隙锁),锁定索引区间,防止其他事务插入新记录

注意:仅在 REPEATABLE READ 隔离级别下生效

Q:共享锁和排他锁的区别?

S 锁:兼容其他 S 锁,互斥 X 锁,用于读操作

X 锁:互斥所有锁,用于写操作,保证数据一致性

Q:意向锁的作用是什么?

快速判断表级是否存在冲突锁,避免遍历所有行锁

意向锁之间兼容(IS+IX 可以共存),但与表级 S/X 锁互斥

3. 性能优化相关

1.按固定顺序访问资源(比如都先锁 id=1 再锁 id=2)

2.减小事务粒度,尽快提交

3.避免长事务,使用短事务

4.合理设置锁等待超时时间 innodb_lock_wait_timeout

六、下节课预告:MySQL 索引优化与执行计划

  • 索引底层数据结构(B + 树 vs Hash)

  • 联合索引、覆盖索引、最左前缀原则

  • EXPLAIN 执行计划解读

  • 慢查询日志分析与优化实战

http://www.jsqmd.com/news/524830/

相关文章:

  • 2026苏浙电商培训优质机构精选指南:杭州电商培训机构哪家正规/杭州电商培训机构哪里多/杭州电商培训机构基地/杭州电商培训机构报名/选择指南 - 优质品牌商家
  • 【AI主动工作系统在小龙虾养殖任务中的应用】
  • 金瀛花客服咨询AI流量赋能,重塑智能体验新标杆 - 王老吉弄
  • 保姆级教程:用LVM给Ubuntu22根目录无损扩容500G(含SSD优化技巧)
  • 2026年哈尔滨净化装饰工程优质企业推荐:P2实验室工程、实验室洁净装修、实验室设计规划、实验室通风改造、实验室气路工程、实验室装修改造、黑龙江志航净化装饰工程、洁净工程专业服务商 - 海棠依旧大
  • 计算机毕业设计:基于Flask与Echarts的动漫数据分析大屏系统 Flask框架 可视化 爬虫 大数据 机器学习 番剧推荐(建议收藏)✅
  • 用Altium Designer搞定晶振Layout:从原理图到3D屏蔽的完整实战流程
  • RAFT与FlowNet:深度学习光流估计的演进与实践
  • Redis 学习总结:List、Pub、Stream 用法与场景实战区分
  • 2026年伺服电爪供应商挑选,高效对接定制化需求 - 品牌2026
  • 视频编解码小白必看:H.264到H.266的演进史与实战选型指南
  • 深入解析PNG隐写技术:从IHDR篡改到IDAT数据块隐藏
  • CISP考试通关秘籍:800道高频真题解析(附答案+备考技巧)
  • STM32传感器开发避坑指南:为什么你的ADC采集总是不准?(附光敏/声音传感器校准代码)
  • 汇川伺服驱动器:从原理到实战控制的深度解析
  • 2026年可靠瓦楞板公司推荐指南:中空板周转箱/PP中空板/万通板/塑料中空板/瓦楞板/防静电中空板/中空板/选择指南 - 优质品牌商家
  • OpCore Simplify:零基础配置黑苹果的终极指南,如何让OpenCore EFI生成变得简单快速
  • HPC_SDK加速库在Ubuntu20.04上的避坑指南:常见错误与解决方案
  • 从零到高薪!3个月逆袭成为AI产品经理的完整攻略(内含大厂JD拆解+学习路线图)
  • 2026年3月上海再生资源回收公司最新推荐:实木地板、旧铝合金门窗、阳光房、二手房地板回收、办公室地板回收、厂房地板回收、学校木地板回收等领域回收机构选择指南 - 海棠依旧大
  • 强化学习入门:用Python实现网格世界中的智能体移动(附完整代码)
  • Codex 的两种使用方式:为什么很多人一开始就用错了?
  • 冰蝎WebShell流量解密实战:从加密流量中溯源攻击者信息
  • Deformable DETR实战:5步搞定多尺度目标检测模型部署(PyTorch版)
  • 医学图像配准实战:elastix从安装到多模态配准完整流程(附避坑指南)
  • FreeRTOS信号量避坑指南:为什么我的中断服务程序会丢失事件?
  • 别再死记硬背了!用Magic/Cadence画版图时,搞懂Active、Select层背后的FAB工艺逻辑
  • 为什么很多本地商家缺的不是流量,而是转化链路
  • 保姆级教程:如何用TartanDrive 2.0数据集训练你的越野自动驾驶模型(附ROS/KITTI格式转换指南)
  • 国产达梦数据库dmPython安装全攻略:从Anaconda到Linux避坑指南