美文网首页
select for update/lock in share

select for update/lock in share

作者: 森林中大鸟 | 来源:发表于2020-07-02 21:03 被阅读0次

for update (排他锁)

目的是在执行这个 select 查询语句的时候,会将对应的索引访问条目进行上排他锁(X 锁),也就是说这个语句对应的锁就相当于update带来的效果。
查询到的记录不允许别的事务再更新和加锁。

lock in share mode(共享锁)

目的是在执行这个select查询语句时,会将对应的索引条目进行上share锁。
当前事务上所之后,别的事务也可以对这些记录上share锁,但不允许上排他锁,更不允许更新。

锁定范围

可能锁住全表,也可能锁住部分记录
当查询语句对应的结果的主键不明确时,会锁住全表。
当查询语句对应的结果主键明确时,只会锁住查询到的记录。

具体的是否锁住了全表可以开启两个窗口,每个窗口中开启一个事务,模拟上锁过程来观察。

区别

很显然,for update控制的更严格。
业务场景中,如果只需要保证当前事务读取到的数据不会被修改,可以使用共享锁。如果当前事务需要修改查询到的记录,不能使用共享锁,因为其他事务可能也会占用共享锁而导致当前事务无法修改。这种场景需要使用for update。

这两种锁在使用过程中都需要即使释放,否则后续的相关操作都会被堵塞。

相关文章

网友评论

      本文标题:select for update/lock in share

      本文链接:https://www.haomeiwen.com/subject/jjkdqktx.html