mysql如何部分解决幻读

两次范围查找不一致

快照读部分解决了幻读的问题,、插入会有幻读的情况发生,示例如下:

#表结构和数据
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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值