innodb中可重复读解决幻读了吗?

1.可重复读没有完全解决幻读问题

事务A:
mysql> begin;
Query OK, 0 rows affected

mysql> select * from t;
+----+------+
| id | name |
+----+------+
| 1 | 2 |
| 2 | b |
+----+------+
2 rows in set
事务B:
mysql> begin;
Query OK, 0 rows affected

mysql> insert into t(name)values('c');
Query OK, 1 row affected

mysql> select * from t;
+----+------+
| id | name |
+----+------+
| 1 | 2 |
| 2 | b |
| 4 | c |
+----+------+
3 rows in set
mysql> commit;

事务A:
mysql> select * from t;
+----+------+
| id | name |
+----+------+
| 1 | 2 |
| 2 | b |
+----+------+
2 rows in set
读取的时候没有出现幻读
事务A:
mysql> update t set name='xx' where id=4;
Query OK, 1 row affected
Enregistrements correspondants: 1 Modifiés: 1 Warnings: 0

mysql> select * from t;
+----+------+
| id | name |
+----+------+
| 1 | 2 |
| 2 | b |
| 4 | xx |
+----+------+
3 rows in set
更新之后出现了幻读

2.可重复读为何解决了读取的幻读,没有解决更新操作后的幻读

因为在RR级别下,读取数据是从快照版本中读取(mvcc机制);而更新操作则直接操作最新数据,即当前数据,所以当前数据可以被更改。更改后,在按照MVCC机制读取数据,肯定能够读取到的,也就出现了幻读。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、数据库简介 1.数据库系统 1.1数据库 DataBase【DB】,指的是长期保存到计算机上的数据,按照一定顺...
    郑元吉阅读 3,709评论 0 6
  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 13,150评论 0 13
  • 1.A simple master-to-slave replication is currently being...
    Kevin关大大阅读 11,240评论 0 3
  • 什么是数据库? 数据库是存储数据的集合的单独的应用程序。每个数据库具有一个或多个不同的API,用于创建,访问,管理...
    chen_000阅读 9,467评论 0 19
  • 春深时节风连雨,老谢清明祭祖先。旷望三牲香火盛,吾知白粥胜烧钱? 父:我很饿了给点吃的儿:等到了下面烧给你吃儿:真...
    鲁牛_阅读 1,592评论 0 1