11.1并发控制概述
11.1.1多事务执行方式
- 事务串行执行
- 交叉并发执行
- 同时并发执行
11.1.2并发控制机制的任务
- 对并发操作进行正确调度
- 保证事务的隔离性
- 保证数据库的一致性
11.1.3并发操作带来的数据不一致性
- 丢失修改( Lost Update)
- 不可重复读( Non-repeatable Read)
- 读“脏”数据( Dirty Read)
丢失修改(写—写)
两个事务T1和T2读入同一数据并修改,T2的提交结果破坏了T1提交的结果,导致T1的修改被丢失。
不可重复读(读—更新)
不可重复读是指事务T读取数据后,事务T2执行更新操作,使T1无法再现前一次读取结果。
包括三种情况:
- 读—修改
- 读—删除
- 读—插入
读“脏”数据
事务T1修改某一数据,并将其写回磁盘事务,T2读取同一数据后,T1由于某种原因被撤销,这时T1已修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致,T2读到的数据就为“脏”数据,即不正确的数据
操作不一致性
并发操作破坏了事务的隔离性
11.1.4并发控制的主要技术
- 封锁( Locking)
- 时间戳( Timestamp)
- 乐观控制法
- 多版本并发控制(MVCC)
11.2封锁
11.2.1什么是封锁
- 封锁就是事务T在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加锁
- 加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。
11.2.2基本封锁类型
- 排它锁( Exclusive locks,简记为X锁)
- 共享锁( Share locks,简记为S锁)