【发布时间】:2020-02-10 23:22:34
【问题描述】:
这是一个mysql next-key lock问题。我有一个表'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');
这就是我所做的
- 在 session1 中,我打开事务并执行“DELETE FROM gaptest WHERE var1 = 10;”
- 在 session2 中我打开事务,首先执行“insert into gaptest select 9,20;”,它被阻塞了。当我执行“插入gaptest select 29,20;”时它没有被阻止。
为什么第一个语句被阻塞而第二个没有?
【问题讨论】:
-
您好,我尝试了您的示例并且没有阻塞...也许您有一些待处理的操作?禁用自动提交?