RC模式
create table t(c1 int primary key,c2 int unique key);
insert into t values(1,1),(2,2);commit;
执行次序:
session1:delete from t where c2=1;
session2:delete from t where c2=2;
session1:insert into t values(1,1); --阻塞在 S mode lock
session2:insert into t values(2,2); --成功
问为什么会成功?第三步的锁不会对session2造成影响?
但replace into t values(1,1)和replace into t values(2,2)会互相堵塞的。
知道答案了。
第三步delete申请2个s mode的next-key lock (1和2),由于2已被事务2锁定,X记录锁和S mode next-key 锁不兼容,导致被堵。
第四步,由于S mode nexy-key互相之间兼容,所有可以成功。
replace into和delete+insert稍有不同,是加载2个X mode next-key lock,导致2个replace into sql会互相堵塞。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。