事務隔離級別爲Read Committed的情況下:
事務2不執行commit,可以讀取到事務1新添加的記錄。此處說明出現了幻讀。
當事務隔離級別改爲REPEATABLE-READ後,能夠解決該問題即解決幻讀。
幻讀定義:一個事務按相同的查詢條件重新讀取以前檢索過的數據,卻發現其他事務插入了滿足其查詢條件的新數據。
session1執行事務1:只插入和提交
mysql> select @@global.tx_isolation;select @@tx_isolation;
+-----------------------+
| @@global.tx_isolation |
+-----------------------+
| READ-COMMITTED |
+-----------------------+
1 row in set (0.01 sec)
+----------------+
| @@tx_isolation |
+----------------+
| READ-COMMITTED |
+----------------+
1 row in set (0.00 sec)
mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from sun;
+--------+------+
| name | age |
+--------+------+
| summer | 26 |
+--------+------+
1 row in set (0.00 sec)
mysql> insert into sun values('aa','88');
Query OK, 1 row affected (0.00 sec)
mysql> commit;
session2執行事務2:只查詢
mysql> select @@global.tx_isolation;select @@tx_isolation;
+-----------------------+
| @@global.tx_isolation |
+-----------------------+
| READ-COMMITTED |
+-----------------------+
1 row in set (0.00 sec)
+----------------+
| @@tx_isolation |
+----------------+
| READ-COMMITTED |
+----------------+
1 row in set (0.00 sec)
mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from sun;
+--------+------+
| name | age |
+--------+------+
| summer | 26 |
| aa | 88 |
+--------+------+