封锁粒度
粒度的辩证关系
- 粒度小,系统开销大,并发程度高
- 粒度大,系统开销小,并发程度低
MySQL提供两种粒度
- 行级锁
- 表级锁
封锁类型
读写锁
互斥锁(Exclusive)
- X锁、写锁
- 加了X锁后,不能再加任何锁
共享锁(Shared)
- S锁、读锁
- 加了S锁后,还可以再加S锁
意向锁
作用
- 快速判断表中是否有某一行上了锁
过程
- 表的IS锁–>行的S锁
- 表的IX锁–>行的X锁
兼容关系
封锁协议
三级封锁协议
一级封锁协议
概念
- 事务修改数据时必须加X锁,事务结束后释放
作用
- 解决丢失修改问题
二级封锁协议
概念
- 事务读取数据时必须加S锁,读完之后释放
作用
- 解决脏读问题
三级封锁协议
概念
- 事务读取数据时必须加S锁,事务结束后释放
作用
- 解决不可重复读问题
两段锁协议
要求
加锁和解锁分为两个阶段进行
- 读写操作之前要获取数据对应的封锁
- 释放封锁之后,不再请求任何封锁
可串行化调度
- 通过并发控制,使得并发执行的事务结果与某个串行执行的事务结果相同
两段锁协议是可串行化调度的充分不必要条件
MySQL-InnoDB引擎
隐式锁定
- 根据隔离级别在需要的时候自动加锁
- 所有的锁在同一时刻被释放
显示锁定
- 使用特定的语句