MySQLLelove 2019-06-26
(可重复读)
之前已经了解到, 该隔离级别可以解决不可重复读问题
(当然, 也能解决脏读问题
), 那么如果单纯用锁来实现, 可能会是如下这样子:
REPEATABLE READ
隔离级别可以解决脏读
, 不可重复读
的问题, 也就是它既可以让事务只能读其他事务已提交的的记录, 又能在同一事务中保证多次读取的数据即使被其他事务修改, 也是一致的。脏读问题
:脏读问题
。不可重复读问题
:不可重复读
, 在事务A中多次读取数据D, 都是一样的。上面使用S锁+X锁
确实可以实现 READ COMMITTED
隔离级别的效果, 也就避免了脏读问题
和不可重复读问题
, 当然, 这里的问题仍然是低效!!!!
因为 MySQL 在事务隔离级别Read committed 、Repeatable Read下,InnoDB 存储引擎采用非锁定
的一致性读
--即读取数据不用加锁,即采用的是MVCC中一致性非锁定读
模式, 所以, InnoDB的做法是: 读不影响写,写不影响读。
READ UNCOMMITTED
和 REPEATABLE READ
这两个隔离级别都是使用 写用排他锁 + 读用MVCC
, 区别可以参考 MySQL-InnoDB-MVCC多版本并发控制