数据库三级封锁协议

2019-08-06  本文已影响0人  今天不想掉头发

转自:
https://baike.baidu.com/item/%E4%B8%89%E7%BA%A7%E5%8A%A0%E9%94%81%E5%8D%8F%E8%AE%AE/1148391?fr=aladdin
https://cloud.tencent.com/developer/article/1138677

数据库分三级封锁协议:

  1. 一级封锁协议:事务T在修改数据A之前必须对其先加X锁,直到事务结束(COMMIT和ROLLBACK)才释放。
    一级封锁协议解决丢失修改的问题。


    image.png

    如上图所示,倘若事务T1没有对R加X锁,则可能会被T2的修改覆盖。使用一级封锁协议后如下所示,避免了丢失T1的更新


    image.png
  2. 二级封锁协议:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,读完后可释放S锁。
    二级封锁协议解决丢失修改和脏读的问题。


    image.png

    如下所示:


    image.png
  3. 三级封锁协议:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。进一步解决了不可重复读的问题(个人感觉三级封锁协议是数据库里的规定,但是对于mysql来说,可以使用MVCC来解决不可重复读中的快照读,当前读依然是要加锁的)


    image.png

    如下所示:


    image.png
上一篇下一篇

猜你喜欢

热点阅读