获得徽章 0
大佬们,RR级别下的间隙锁对delete和insert操作是不是区别对待呀?

-- id 为唯一索引、id数据存在: 5,7,11
--事务A
SELECT * FROM `test1` WHERE `id` BETWEEN 3 and 8 for update;
--事务B
INSERT INTO `test1` (id) VALUES (2); # 阻塞执行
--事务C
DELETE FROM test1 WHERE id = 2; # 正常执行
--事务D
UPDATE test1 set name = 2 WHERE id = 2; # 正常执行
--事务E
DELETE FROM test1 WHERE id = 11; # 阻塞执行
--事务F
UPDATE test1 set name = 2 WHERE id = 11; # 阻塞执行

结果分析:事务A会锁住(-infinte,5],(5,7],(7,11] 但是仅针对插入。对于更新、删除动作,间隙锁好像【部分】失效了。没错,就是【部分】:C、D间隙锁无效,E、F间隙锁有效。就像是:删除和更新的时候判断了Id=2小于3所以不阻塞,那么更新id=11大约8的时候也不用阻塞吧。既然如此,插入的时候,岂不是也可以直接根据id值来判断是否阻塞。我大概是有某个重要的东西不知道,请大佬们解惑
展开
6
大佬们,RR级别,对主键ID进行范围查询:

SELECT * FROM `test` WHERE `id` BETWEEN 5 AND 7 FOR UPDATE;

为什么会锁住 (5, 7]、(7, 11] 这两个区间?锁住(5, 7]不就够了么?
展开
7
mysql
sending data耗时这个异常情况应该怎么处理?
已经尝试过配置innodb_buffer_pool_size = 4g,innodb_buffer_pool_instances = 1,依然无效;
蓝猫3000问于2022-04-07 18:09发布的图片
蓝猫3000问于2022-04-07 18:09发布的图片
22
下一页