并发控制
并发造型带来的数据不一致性
-
丢失修改(lost update)
两个事务T1和T2T2读入同一数据并修改,T2提交的结果破坏了T1提交的结果,导致T1的修改丢失
-
不可重复读(non-repeatable read)
事务T1读取数据后,事务T2执行更新操作,使T1无法再现前一次读取结果
-
读“脏”数据(dirty read)
-
事务T1修改某一数据并将其写回磁盘,事务T2读取同一数据后,T1由于某些原因被撤销
这时被T1修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致,则T2读到的数据就为“脏”数据,即不正确数据
并发控制的主要技术有
-
- 封锁(locking)
- 时间戳(timestamp)
- 乐观控制(optimistic scheduler)
- 多版本并发控制(multi-version concurrency control)
封锁
基本的封锁类型有两种:排他锁(X锁)和共享锁(S锁)
1、排他锁:若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能对A加任何类型的锁,直到T释放A上的锁为止
2、共享锁:若事务T对数据对象A加上S锁,则只允许T读取A,不能修改A,其他事物只能对A加S锁,不能加X锁,直至T释放A上的S锁为止
封锁协议
- 一级封锁协议
事务T在修改数据R之前先对其加X锁,直到事务结束才释放
- 可防止丢失修改并保证事务T是可恢复的
-
二级封锁协议
在一级封锁协议基础上增加事务T在读取数据R之前先对其加S锁,读完后即可释放S锁
- 防止丢失修改,还可以进一步防止读“脏”数据
- 三级封锁协议
在一级封锁协议的基础上增加事务T在读取数据R之前必须先对其加S锁,直至事务结束才释放
-
- 在一级封锁协议的基础上增加事务TT,在读取数据RR之前必须先对其加SS锁,直到事务结束才释放
-
- 防止丢失修改,还可以进一步防止读“脏”数据、不可重复读
标签:封锁,控制,事务,修改,T2,T1,并发,数据 From: https://www.cnblogs.com/hinima/p/16900397.html