开发者社区 问答 正文

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 2440 分享 版权
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
    赞同 展开评论
问答分类:
问答标签:
问答地址: