SQL使用资源锁定的方式管理用户的并发操作:
- 乐观并发控制:假定用户之间不太可能发生资源冲突,允许用户在不锁定任何资源的情况下执行事务,只有当用户试图修改数据时才检查资源是否冲突,需要使用游标。
- 悲观并发控制:根据需要在事务的持续时间内锁定资源,从而确保事务的完整性和数据库的一致性(默认)
基本锁:
一般更新模式由一个事物组成,该事务先读取记录,获得资源的共享锁,然后修改记录,次操作要求锁转换为排它锁
- 共享锁(S锁 Share lock)
用于只读数据操作,它允许多个并发事务对资源锁定进行读取,但禁止其他事务对锁定资源进行修改操作。 -
排他锁(X锁 eXclusive lock)
它锁定的资源不能被其他并发事务再进行任何锁定,所以其他事务不能读取和修改锁定的资源用于自己数据的修改。
image.png
三级封锁协议:
- 一级封锁协议
事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放,结束包括正常结束与非正常结束。
可以防止丢失修改,并保证事务T是可以恢复的,但是不能保证可重复读和不读的脏数据。 - 二级封锁协议
一级封锁协议+事务T在读取数据R前必须先加S锁,读完后即可释放S锁
可以防止丢失修改,还可以进一步防止读“脏数据”,不能保证可重复读 - 三级封锁协议
一级封锁协议+事务T在读取数据R前必须先加S锁,直到事务结束才能释放。
可以防止丢失修改,读“脏数据”和不可重复读
网友评论