mysql两阶段锁协议_数据库的S锁和X锁,两段锁协议

基本的封锁类型有两种:排它锁(X锁)和共享锁(S锁).所谓X锁,是事务T对数据A加上X锁时,只允许事务T读取和修改数据A,...所谓S锁,是事务T对数据A加上S锁时,其他事务只能再对数据A加S锁,而不能加X锁,直到T释放A上的S锁。

若事务T对数据对象A加了S锁,则T就可以对A进行读取,但不能进行更新(S锁因此又称为读锁),在T释放A上的S锁以前,其他事务可以再对A加S锁,但不能加X锁,从而可以读取A,但不能更新A.

两段锁协议:

数据库的两段锁协议是指所有事务必须分两个阶段对数据项进行加锁和解锁

1.扩展阶段

在对任何数据项的读、写之前,要申请并获得该数据项的封锁。

2.收缩阶段

每个事务中,所有的封锁请求必须先于解锁请求。

例如:事务T遵循两段锁协议,其封锁协议为:

BEGIN TRANSACTION;

LOCK(A);READ A; A := A + 100; WRITE A; LOCK(B); UNLOCK(A); READ(B), UNLOCK(B),;

COMMIT;

可以证明:若并发执行的所有事务均遵守两段锁协议,则对这些并行事务的任何并行调度策略都是可串行化

需要说明的是,并发执行的所有事务若均遵守两段锁协议,只是这些事务的并行调度策略能可串行化的充分条件,不是必要条件。

两段锁协议与防止死锁的一次封锁法的区别:

一次封锁法要求事务必须一次对所有要使用到的数据项进行加锁,否则不能继续运行。

显然,一次封锁法符合两段锁协议,但是两段锁协议并不要求一次就要对所有需要用到的数据项进行加锁,因此遵守两段锁协议的事务有可能死锁

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值