开发者社区> 问答> 正文

innodb 锁问题

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)会互相堵塞的。

展开
收起
themoment 2017-05-06 16:00:34 2330 0
1 条回答
写回答
取消 提交回答
  • 知道答案了。
    第三步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会互相堵塞。

    2019-07-17 21:08:34
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载