这是mysql的下一个密钥锁定问题。我有一张“空位”的桌子,它的声明是
DROP TABLE IF EXISTS `gaptest`;
CREATE TABLE `gaptest` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`var1` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `var1` (`var1`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8mb4;
-- ----------------------------
-- Records of gaptest
-- ----------------------------
INSERT INTO `gaptest` VALUES ('1', '5');
INSERT INTO `gaptest` VALUES ('5', '10');
INSERT INTO `gaptest` VALUES ('30', '10');
INSERT INTO `gaptest` VALUES ('10', '20');
INSERT INTO `gaptest` VALUES ('15', '30');
INSERT INTO `gaptest` VALUES ('20', '40');
INSERT INTO `gaptest` VALUES ('40', '55');
INSERT INTO `gaptest` VALUES ('25', '60');
以下是我所做的
为什么第一条语句被阻止,第二条没有被阻止?
发布于 2020-07-29 02:41:15
在第1节中,有如下所示的下一个键锁:
-- format by (var1, id)
((5, 1), (10, 5)]
((10, 5), (10, 30)]
((10,30), (20, 10)]
对于(20,9),它属于最后一个范围,因此它将被阻塞。对于(20,29),它超出了范围,所以它不会被阻挡。
您需要考虑var1
和id
的范围。因此,对于var1=20
,小于10的id
将被阻塞,大于10的id
将不会阻塞。
https://stackoverflow.com/questions/58375009
复制相似问题