总结(Summary)
重难点分析
- MySQL中的锁的应用场景
并发场景下的数据竞争
- MySQL中锁的类型以及锁应用实践
1. 从性能上讲可以分为乐观锁和悲观锁。 2. 从操作类型上讲可以读锁(共享锁)和写锁(排它锁)
2-1. 共享锁 (select * from regions where id=13 lock in share mode),又称为S锁, 允许当前事务读取一行,阻止其它事务获取相同数据集的排它锁。 2-2. 排它锁 (select * from regions where id=13 for update),又称为X锁。 允许当前事务更新数据,阻止其它事务获取相同数据集的共享锁和排它锁。
3. 从数据操作粒度上来讲可以分为全局锁、表锁、行锁、间隙锁(between 100 and 200)、...
- MVCC应用场景、设计以及实现原理。
MVCC是多版本并发控制,保证性能的基础上实现事务的隔离级别。有四大特性:
1. 原子性(通过undolog实现-执行回滚) 2. 隔离性(通过锁,MVCC-多版本并发控制) 3. 一致性(通过undolog,redolog,binlog) 4. 持久性(通过redolog日志实现)
FAQ分析
- 如何保证事务的四大特性落地?(回滚日志,重做日志,binlog,锁和MVCC)
- 为什么使用锁?(保证事务并发执行时数据的正确性)
- MySQL中常用的锁的类型?(全局锁,表锁、行锁、间隙锁、...)
- 什么是共享锁(读共享、乐观锁)、排它锁(悲观锁)?
- 如何理解全局锁以及如何添加全局锁?(对所有库的一种加锁方式)
- 如何理解表锁以及如何添加表锁?(表读锁、表写锁)
- 如何添加行读锁(共享锁)?select xx from xx where xx lock in share mode
- 如何添加行写锁(排它锁)? select xx from xx where xx lock for update
- 如何理解mysql中的死锁?(并发事务处于相互等待的一种状态)
- 如何理解MVCC?(多版本并发控制,用于更好实现事务隔离,例如RC、RR)
- MVCC底层逻辑是如何实现的?(依赖于回滚日志链、ReadView,记录中的隐藏字段)