数据库中的封锁协议

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

并发产生的数据不一致有:丢失修改,读脏数据,不可重复读
两种锁:S锁(共享锁,读锁),X锁(排它锁,写锁)
加S锁后,本事务就只能读取数据而不能修改。

其他事务可以加S锁来读取数据,但不能加X锁修改数据。

即:只要数据上有S锁,任何事务都只能再对其加S锁读取,而不能加X锁修改。

加X锁后,本事务可以读取和修改数据。

其他事务不能加任何锁,从而也不能读取和修改数据。

封锁协议有:三级封锁协议以及两段锁协议
一级封锁协议:写数据前加X锁,事务结束释放X锁。

解决丢失修改问题。

二级封锁协议:一级之上,读数据前加S锁,读完释放S锁。

一级之上解决读脏数据问题。

三级封锁协议:二级之上,事务结束才释放S锁。

二级之上解决不可重复读问题。

两段锁协议(2PL):读数据前加S锁,写数据前加X锁,事务结束时才释放。

当要修改数据时,事务应对已加的S锁升级为X锁。

事务释放一个封锁后,不再申请其它任何封锁。

即一个事务如果对不同数据加锁,解锁都是放到后面一块儿进行的。

注意,以前一直弄错,这儿是一个事务,如果是并发事务,A事务的解锁可以放到B事务之前。

两段锁协议解决的是事务并发时的正确调度,并不能解决死锁。

注意:如果两个事务都对同一数据有读和写,那么可以不加S锁,直接上X锁。

相关文档
最新文档