数据库死锁

死锁概念,两段式锁协议。没有并发引起的三个问题

  • 死锁:产生死锁的原因是两个或多个事务都已封锁了一些数据对象,然后又都请求对已为其他事务封锁的数据对象加锁,从而出现死等待。

    预防死锁的发生就是要破坏产生死锁的条件

  • 两段锁协议: 指所有事务必须分两个阶段对数据项加锁和解锁

    • 在对任何数据进行读、写操作之前,事务首先要获得对该数据的封锁
    • 在释放一个封锁之后,事务不再申请和获得任何其他封锁
  • “两段”锁的含义

    • 事务分为两个阶段
    1. 第一阶段是获得封锁,也称为扩展阶段

    事务可以申请获得任何数据项上的任何类型的锁,但是不能释放任何锁

    1. 第二阶段是释放封锁,也称为收缩阶段

    事务可以释放任何数据项上的任何类型的锁,但是不能再申请任何锁

  • 三个问题

    1. 丢失修改:两个事务T1和T2读入同一数据并修改,T2的提交结果破坏了T1提交的结果,导致T1的修改被丢失

    2. 不可重复读:v事务T1读取数据后,事务T2

      执行更新操作,使T1无法再现前一次读取结果。

    3. 读“脏”数据:事务T1修改某一数据,并将其写回磁盘。事务T2读取同一数据后,T1由于某种原因被撤销。这时T1已修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致。T2读到的数据就为“脏”数据,即不正确的数据

Contents