[数据库]封锁管理和封锁协议

本文介绍了在数据库中事务并发操作可能引发的问题,如丢失修改、读取脏数据和不可重复读等,并探讨了解决这些问题的方法,包括使用不同级别的封锁协议及两段锁协议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

事务并发操作不合理带来的问题


  1. 丢失修改
      T1事务修改——T2事务修改,此时T1的修改被覆盖,这叫丢失修改。
  2. 读“脏”数据
      T1事务修改——T2读数据——T1撤回修改,此时T2发现读的数据和数据库中不一样,这叫读“脏”数据。
  3. 不可重复读
      T1事务读完——T2事务修改——T1事务再读,发现数据不一样了,这叫不可重复读。




封锁管理


数据库提供两种基本锁:排它锁(X锁,又成为写锁)共享锁(S锁,又成为读锁)

  1. 若事务T对数据A上了排他锁,则事务T可以对数据A进行读写操作,而其他事务不能进行读写操作并且也不能加锁。
  2. 若事务T对数据A上了共享锁,则事务T可以对数据A进行读操作,但不能写,其他事务可以上共享锁,但是不能上排它锁。





封锁协议


三级封锁协议解决:丢失修改读“脏”数据以及不可重复读 带来的数据不一致性。

  1. 1级封锁协议
    事务在修改数据A时要加X锁(排他锁),可以避免丢失修改。
  2. 2级封锁协议
    在一级封锁协议的基础上,事务在读数据的时候,要加S锁(共享锁),读入数据后立即释放S锁(共享锁),可以避免读“脏”数据。(外加上面一种)
  3. 3级封锁协议
    在一级封锁协议的基础上,事务在读数据的时候,要加S锁,一直到事务结束后才释放S锁,可以避免不可重复读。(外加上面两种)

两段锁协议
  两段锁协议保证了并发操作的可串行化。两段锁约定:事务在对数据进行读写操作前,必须先获得对数据的封锁,并且在释放一个封锁后不能再获得其他的封锁。这就是两段锁的含义——事务分成获得加锁和解锁两个阶段

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值