mysql 版本 5.7.2
隔离级别 rr
mysql 间隙锁 !不是锁定行,也不是锁定某个列,是锁定对应的索引。测试表 tx_test ,age 字段加了索引了。
-- Table structure for tx_test
DROP TABLE IF EXISTS `tx_test`;
CREATE TABLE `tx_test` (
`id` int(11) NOT NULL,
`name` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`age` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `age` (`age`),
KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
-- Records of tx_test
BEGIN;
INSERT INTO `tx_test` (`id`, `name`, `age`) VALUES (1, '123', 3);
INSERT INTO `tx_test` (`id`, `name`, `age`) VALUES (2, '44', 4);
INSERT INTO `tx_test` (`id`, `name`, `age`) VALUES (3, '55', 5);
INSERT INTO `tx_test` (`id`, `name`, `age`) VALUES (4, '41', 50);
COMMIT;
#session1
begin;
SELECT * from tx_test;
update tx_test set name='aaaaa' where age >1 and age <20;
SELECT * from tx_test;
COMMIT;
#session2
begin;
SELECT * from tx_test;
INSERT INTO tx_test
(id
, name
, age
) VALUES (88, '41', 77);
SELECT * from tx_test;
COMMIT;
为什么 session2 的 INSERT INTO tx_test
(id
, name
, age
) VALUES (88, '41', 77); 会阻塞呢 。session1 的查询不是应该 锁定了 -无穷到 50 吗
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.