并发控制 的两个方法:二段锁协议 和 时间戳协议
二段锁协议
The Two-Phase Locking Protocol
简称2PL
有什么锁
某个事务对某个数据项拥有共享锁(shared lock),则可读
某个事务对某个数据项拥有排他锁(exclusive lock),则可读也可写
多个事务可以同时拥有某个数据项的共享锁
只要某个数据项被锁(无论是共享锁还是排他锁),其他事务再次申请排他锁就必须等
只要某个数据项被排他锁 锁住,其他事务再次申请任何锁都要等
协议有什么用
可以保证调度是冲突可串行化调度
协议是怎么实现功能的
每个事务分为两个阶段
- 扩张阶段:可以在这个阶段获取锁
- 收缩阶段:可以在这个阶段释放锁
每个事务一开始默认为扩张阶段,一旦释放了一个锁,就进入了收缩阶段,你就别想再请求获取锁了
时间戳协议
协议有什么用
- 可以保证调度是冲突可串行化调度(等价于按照时间戳从小到大的顺序串行执行)
- 无死锁
协议是怎么实现功能的
- 某个事务想读取某个数据项,该事务的时间戳必须要比该数据项的写时间戳大,符合的话就可以读并且更新该数据项的读时间戳为该事务,否则rollback重新进入系统,被分配一个更大的时间戳才能读
- 某个事务想修改某个数据项,该事务的时间戳同时比该数据项的写,读时间戳大,符合的话就可以修改该数据项并且更新该数据项的写时间戳为该事务,否则rollback