不可重复读(幻影现象)可重复读
MySQL默认情况下是可重复读,解决了幻影问题
mysql> show variables like ‘%tx%’;
+-----------------------+--------------------------+
| Variables_name | Value |
+------------------------+--------------------------+
| tx_isolation |REPEATABLE-READ |
| tx_read_only | OFF |
+------------------------+---------------------------+
改成 read-committed(已提交读)后,出现幻影读
mysql> set @@session.tx_isolation = 'READ-COMMITTED';
Query OK, 0 rows affected (0.00 sec)
演示幻影读:
A:设置隔离级别为已提交读:
mysql> set @@session.tx_isolation = 'READ-COMMITTED';
Query OK, 0 rows affected (0.00 sec)
对这4行数据加了锁:对表加is锁,对4行加x行锁,事务没有提交
mysql> select * from t2 where name=’abc’ for uodate;
+------+---------+
|id | name |
+------+---------+
|1 | ABC |
|3 |abc |
|8 |ABC |
|10 |abc |
+------+---------+
4 rows in set (0.01 sec)
B:设置隔离级别为已提交读:
mysql> set @@session.tx_isolation = 'READ-COMMITTED';
Query OK, 0 rows affected (0.00 sec)
对t2表插入 name 为abc 的数据,成功了:
mysql> insert into t2(name) values(‘abc’);
A:再去执行,发现成了5行name为abc的数据:
mysql> select * from t2 where name=’abc’ for uodate;
+------+---------+
|id | name |
+------+---------+
|1 | ABC |
|3 |abc |
|8 |ABC |
|10 |abc |
|16| abc |
+------+---------+
4 rows in set (0.01 sec)
一会4行,一会5行,如果把这个参数设置成已提交读,就出现了幻影现象。