MySQL InnoDB RR 下存在幻读?到底是幻读还是数据不一致?

什么是幻读?

SQL92-幻读(phantom read):SQL-transaction T1 reads the set of rows N that satisfy some . SQL-transaction T2 then executes SQL-statements that generate one or more rows that satisfy the used by SQL-transaction T1. If SQL-transaction T1 then repeats the initial read with the same , it obtains a different collection of rows.

在一个事务中一次查询之后,有另一个事务进行了插入,插入的内容是满足上面查询条件的,如果这个事务当中还有第二次同样查询条件的查询,那么就会导致了第二次查询得到的结果集增多。

RR 与 RC

MySQL-InnoDB-RR:可重复读对事务涉及到的数据加读锁和写锁,读锁和写锁一直持有直到事务结束,不再加范围锁。
MySQL-InnoDB-RC:读已提交对事务涉及到的数据加读锁和写锁,写锁会一直持续到事务结束,读锁在查询完成后会马上释放。

RC:由于缺乏贯穿整个事务的读锁,事务涉及到的数据可能被其他事务改变。
RU:只加写锁,完全不加读锁,导致可以读到其它事务加了写锁的数据,因而导致脏读。
MVCC:

  1. 对数据库的任何修改都不会覆盖之前的数据,产生一个新版本与老版本共存,达到读取时完全不加锁。
  2. MVCC 只针对读&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值