关于可重复读与幻读的一点思考

首先声明~
可重复读是隔离级别,
幻读是这个隔离级别下出现的问题。

含义

可重复读

是指 在修改删除的前提下,同一个事务中,执行的查询结果是一致的
举个栗子:

时间线 事务1 事务2
1 开启事务
2 查询数据A
3 开启事务
4 更新数据A
5 提交事务
6 查询数据A

对于事务1,两次查询的结果应该是一致,无论事务2是更新了数据A还是删除了数据A

幻读

个人理解,在新增的前提下,同一个事务查询和插入的预期结果不一致,查询没有,但是插入会报错

时间线 事务1 事务2
1 开启事务
2 开启事务
3 插入数据A
4 提交事务
5 查询A,不存在
6 插入A,报错

原理

mysql进行读操作时分两种情况:
1、一致性读(快照读)
2、当前读

一致性读

基于MVCC,当前事务内,只能读到事务id小于当前事务且非正在进行中的事务的数据
select时使用快照读

当前读

读取的是最新的数据,insert/update/delete时使用当前读

猜你喜欢

转载自blog.csdn.net/lbh199466/article/details/107332949
今日推荐