事务
事务的基本概念
什么是事务?
事务的使用
-- 开启事务
BEGIN; -- 或 START TRANSACTION;
-- 执行 SQL 操作
UPDATE account SET balance = balance - 100 WHERE id = 1;
UPDATE account SET balance = balance + 100 WHERE id = 2;
-- 提交事务
COMMIT;
-- 或者回滚事务
ROLLBACK;为什么需要事务?
ACID 特性详解 ⭐⭐⭐⭐⭐
A - Atomicity(原子性)
定义
实现原理:Undo Log
C - Consistency(一致性)
定义
什么是"一致性状态"?
实现原理
I - Isolation(隔离性)⭐⭐⭐⭐⭐
定义
实现原理:锁 + MVCC
D - Durability(持久性)⭐⭐⭐⭐⭐
定义
实现原理:Redo Log + WAL
操作
直接写磁盘
先写 Redo Log
值
含义
性能
安全性
ACID 特性总结
特性
定义
实现机制
重要性
事务隔离级别 ⭐⭐⭐⭐⭐
四种隔离级别
隔离级别
脏读
不可重复读
幻读
设置隔离级别
并发问题详解 ⭐⭐⭐⭐⭐
1. 脏读(Dirty Read)
定义
问题
演示
解决方案
2. 不可重复读(Non-Repeatable Read)⭐⭐⭐⭐⭐
定义
原因
演示
解决方案
3. 幻读(Phantom Read)⭐⭐⭐⭐⭐
定义
原因
与不可重复读的区别
问题
关注点
原因
演示
MySQL 的解决方案 ⭐⭐⭐⭐⭐
4. 丢失更新(Lost Update)
定义
演示
解决方案
并发问题总结表 ⭐⭐⭐⭐⭐
问题
定义
原因
隔离级别
解决方案
当前读与快照读 ⭐⭐⭐⭐⭐
快照读(Snapshot Read)
定义
特点
SQL 语句
示例
当前读(Current Read)
定义
特点
SQL 语句
示例
快照读 vs 当前读
特性
快照读
当前读
幻读的完整解决方案 ⭐⭐⭐⭐⭐
1. 快照读:MVCC
2. 当前读:Next-Key Lock
总结
日志系统 ⭐⭐⭐⭐⭐
1. Redo Log(重做日志)⭐⭐⭐⭐⭐
作用
工作原理
为什么不直接写数据页?
操作
写 Redo Log
写数据页
Redo Log 的格式
崩溃恢复
两阶段提交(2PC)⭐⭐⭐⭐⭐
参数配置
2. Undo Log(回滚日志)⭐⭐⭐⭐⭐
作用
工作原理
回滚操作
Undo Log 版本链
Undo Log 的类型
Purge 操作
长事务的危害 ⭐⭐⭐⭐⭐
3. Binlog(归档日志)
作用
Binlog vs Redo Log
特性
Redo Log
Binlog
Binlog 格式
参数配置
日志系统总结
事务的最佳实践
1. 保持事务简短
2. 避免长事务
3. 合理选择隔离级别
4. 显式开启事务
5. 使用合适的锁粒度
6. 批量操作分批处理
面试高频问题 ⭐⭐⭐⭐⭐
Q1: 事务的 ACID 特性是如何实现的?
Q2: MySQL 有哪几种隔离级别?
Q3: 什么是脏读、不可重复读、幻读?
Q4: MySQL 如何解决幻读?
Q5: 快照读和当前读的区别?
Q6: Redo Log 和 Undo Log 的区别?
特性
Redo Log
Undo Log
Q7: 什么是两阶段提交?为什么需要?
Q8: 如何避免长事务?
总结
核心要点 ⭐⭐⭐⭐⭐
记住这些关键点
Last updated