我正在使用MySQL InnoDB表,并试图了解在索引范围扫描情况下某些行级锁定的原因。我发现,根据所使用索引的唯一性,可能会锁定额外的索引记录(超出范围)。SELECT * FROM foo WHERE a < 2 FOR UPDATE;DELETE FROM foo WHERE a = 3; -- Success测试用例2
这使用表的原始行,并返回已删除的记录。为什么InnoDB在二级索引的情况下会阻塞扫描范围右侧的下
最近我在MySQL5.7文档中读到了InnoDB锁。我搞混了Next-Key Lock和Gap Lock。在文档中,下一个键锁定记录和它之前的间隙,而间隙锁锁定唯一的间隙?values (2,2,2,2),(6,6,6,6),(7,7,7,7);语句1使用唯一索引查找记录不存在,它使用间隙锁语句2:select * from r
MYSQL VERSION : 5.7.X我有一个大致的想法,读提交的隔离将主要使用共享和独占记录锁。但是,根据mysql的文档,在某些情况下,甚至读提交也必须使用间隙锁定。
阅读承诺..。对于锁定读取(选择用于更新或锁定共享模式)、UPDATE语句和DELETE语句,InnoDB只锁定索引记录,而不锁定前面的空白,从而允许在锁定的记录旁边自由插入新记录。间隙锁定只用于外键约束检查和重