三段锁协议

  由于并发,如果不加以控制,就会出现以下问题:丢失修改,不可重复读,幻读(读脏数据)。

  解决方法:

  1)一级封锁协议

  做法:修改对象之前必须加X锁,直到事务结束才能释放。

  好处:可防止丢失修改。

  2)二级封锁协议

  做法:在一级锁的基础上,读取数据之前必须先对其加 S 锁,读完后即可释放 S 锁。

  事务T1对C进行修改,加 X锁;事务T2想读C,加 S锁,这个时候因为已经有 X锁,无法加锁。直到 T1修改完后,释放 X锁,才可以加

  S锁。

  避免了读脏数据。

  3)三级封锁协议

   为了解决 不可重复读的问题。

  出现重复读的情况:事务 T1 对 A读数据之前,加 S锁,然后读完再释放。然后事务T2对A加 X锁,修改了A。事务T1并没有结束,然后

  为了验算,再次读,已经不能读到之前的数据了。

  在一级锁的基础上,读取数据之前必须先对其加 S 锁,直到事务结束才释放。

  

  

原文地址:https://www.cnblogs.com/juanzhi/p/12820772.html