首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >间隙锁定mysql

间隙锁定mysql
EN

Stack Overflow用户
提问于 2018-02-22 20:42:30
回答 1查看 714关注 0票数 1

我需要澄清一下MySQL文档的摘录:

...conflicting锁可以通过不同的事务保持在间隙上。例如,事务A可以在间隙上持有共享间隙锁(间隙S-锁),而事务B可以在同一间隙上持有独占间隙锁(间隙X-锁). InnoDB中的gap锁“纯粹是禁止的”,这意味着它们只会阻止其他事务插入到Gap。它们不会阻止不同的事务在相同的间隙上使用gap锁。因此,间隙X锁具有与间隙S锁相同的效果.

我有一个表"aaa“,有两个列- number (主索引)和"mark”- VARCHAR (没有索引)。现在我执行:

代码语言:javascript
复制
 Window1    
     SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
     BEGIN;
     SELECT * FROM aaa WHERE mark < 6 FOR UPDATE;
 Window2
     SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
     BEGIN;
     SELECT * FROM aaa WHERE mark < 6 LOCK IN SHARE MODE;

Window1中的语句获取记录"mark = 6“和前面的间隙的x锁。

现在,Window2中的语句要求在完全相同的记录和间隙上设置一个s锁,这(根据docs)应该被授予绝对的权限--但它不是!

我哪里出错了?

EN

回答 1

Stack Overflow用户

发布于 2018-11-06 17:44:59

你有标记< 6的数据吗?如果是这样的话,X记录锁将与gap锁一起由第一个事务授予。第二笔交易无法获得这些记录上的S记录锁。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48936811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档