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机制读取数据,肯定能够读取到的,也就出现了幻读。

你可能感兴趣的:(innodb中可重复读解决幻读了吗?)