这是mysql下一键锁定问题。我有一个表“ gaptest”,其声明为
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');
这就是我所做的
为什么第一个语句被阻止而第二个语句没有被阻止?
答案 0 :(得分:0)
在会话1中,有如下所示的下一键锁定:
df
ID Possible_Size Actual_Size Big
0 1234 BIG BIG True Positive
1 5678 MEDIUM BIG False Negative
2 9876 BIG SMALL False Positive
3 1092 MEDIUM MEDIUM
对于(20,9),它属于最后一个范围,因此将被阻止。 对于(20,29),它不在范围内,因此不会被阻止。
您需要考虑-- format by (var1, id)
((5, 1), (10, 5)]
((10, 5), (10, 30)]
((10,30), (20, 10)]
和var1
的范围。因此,对于id
,小于{10的var1=20
将被阻止,而大于{10的id
将不会被阻塞。