两次范围查找不一致
快照读部分解决了幻读的问题,、插入会有幻读的情况发生,示例如下:
#表结构和数据
CREATE TABLE `locktest` (
`id` int(11) NOT NULL,
`age` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO `locktest` (`id`, `age`) VALUES (3, 3);
INSERT INTO `locktest` (`id`, `age`) VALUES (5, 5);
INSERT INTO `locktest` (`id`, `age`) VALUES (7, 7);
#执行顺序
#事物1
BEGIN #1开始事物1
SELECT id FROM locktest WHERE id BETWEEN 3 and 5; #2查询结果3,5
SELECT id FROM locktest WHERE id BETWEEN 3 and 5; #4查询结果3,5
INSERT into locktest VALUES (2,2); #5插入失败
COMMIT;
#事物2
INSERT into locktest VALUES (2,2); #3 插入成功
当前读通过临键锁的方式,能够解决幻读的问题。(查询范围内的数据会被上锁,其他事物不能插入,也不能更新,上锁规则看4)