背景:基于之前的一篇文章
可重复读:可重复读隔离级别的实现是每个事务在打开时都会生成一个一致的视图。 当其他事务提交时,不会影响当前事务中的数据。 为了保证这一点,MySQL是通过多版本控制机制MVCC来实现的; 我们亲自验证下;[mysql] 深入分析MySQL版本控制MVCC规则_平静不绝望的博客-CSDN博客_mysql版本控制
1 事务隔离级别查看 (RR级别)
2 事务1开始:左边窗口客户端(START TRANSACTION;)
3. 事务1 执行select * from posts where id = 1; 快照查看 post_id = 2;事务2右侧窗口开启START TRANSACTION; 并update post_id = 2000;
4. 事务1 执行select * from posts where id = 1; 快照查看 post_id = 2 (快照不变)
事务2 执行select * from posts where id = 1; 快照查看 post_id = 2000
5. 事务2 提交事务 commit;
事务1 执行select * from posts where id = 1; 快照查看 post_id = 2 (快照不变) 
6. 事务1 提交事务 commit; 再执行查询post_id = 2000; 内容改变
7. 结论:
mysql RR级别下,MVCC实现了多版本快照读;
8. 参考命令
mysql> SELECT @@GLOBAL.tx_isolation, @@tx_isolation;
+-----------------------+-----------------+
| @@GLOBAL.tx_isolation | @@tx_isolation |
+-----------------------+-----------------+
| REPEATABLE-READ | REPEATABLE-READ |
+-----------------------+-----------------+
1 row in set (0.01 sec)
事务1:
开启事务:
START TRANSACTION;
select * from posts where id = 1;
COMMIT;
事务2:
START TRANSACTION;
update posts set post_id = 2000 where id = 1;
COMMIT;