lock in share mode 和 for update的区别

for updatelock in share mode是应用于并发情况下对数据进行加锁操作,举例假设:Session A(先)、Session B(后)来描述并发操作。

select ... lock in share mode,是IS锁(意向共享锁),在符合条件的rows上都加了共享锁,因此其他session可以读取这些记录,也可以继续添加IS锁,但是无法修改这些记录直到你这个加锁的Session A执行完成(否则直接锁等待超时)。

select ... for update,是IX锁(意向排它锁),在符合条件的rows上都加了排它锁,其他session也就无法在这些记录上添加任何的S锁或X锁。

如果不存在一致性非锁定读的话,那么其他session是无法读取和修改这些记录的,但是innodb有非锁定读(快照读并不需要加锁),for update之后并不会阻塞其他session的快照读取操作,除了select ...lock in share mode和select ... for update这种显示加锁的查询操作。

也就是说,for update的加锁方式无非是比lock in share mode的方式多阻塞了select...lock in share mode的查询方式,并不会阻塞快照读。

并发时for update会使B一直阻塞,等待A操作完成后执行B操作;

而在使用lock in share mode下当B阻塞时,如果A继续有修改数据,那么此时B会终止失败。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值