mysql事物隔離級別實例驗證(一起學習吧)

MySQL 文章 技術 帥帥的日常 2017-06-06

之前曾發表過對mysql事物隔離級別的相關說明的文章,本次通過做實驗來驗證mysql的此級別。

TimeSession 1Session 2
T1set autocommit=0;set autocommit=0;
T2
mysql> select * from test;+——+———+| id | version |+——+———+| 1 | 1 |+——+———+1 row in set (0.00 sec)

T3
mysql> update test set version=2 where id=1;Query OK, 1 row affected (0.02 sec)Rows matched: 1 Changed: 1 Warnings: 0mysql> select * from test;+——+———+| id | version |+——+———+| 1 | 2 |+——+———+1 row in set (0.00 sec)
T4
mysql> select * from test;+——+———+| id | version |+——+———+| 1 | 1 |+——+———+1 row in set (0.00 sec)【說明】Session 2未提交,看到數據不變,無髒讀。

T5
commit;
T6
mysql> select * from test;+——+———+| id | version |+——+———+| 1 | 1 |+——+———+1 row in set (0.00 sec)【說明】Session 2已經提交,還是看到數據不變,即可以重複讀。

T7commit;
T8
mysql> select * from test;+——+———+| id | version |+——+———+| 1 | 2 |+——+———+1 row in set (0.00 sec)【說明】提交事務,看到最新數據。

T9

mysql> insert into test values(2,1);Query OK, 1 row affected (0.00 sec)mysql> select * from test;+——+———+| id | version |+——+———+| 1 | 2 || 2 | 1 |+——+———+2 rows in set (0.00 sec)mysql> commit;Query OK, 0 rows affected (0.00 sec)
T10mysql> select * from test;
+——+———+| id | version |+——+———+| 1 | 2 |+——+———+1 row in set (0.00 sec)【說明】Session 2的insert事務已經提交,看到的數據和T8的時候一樣,即未發生幻象讀。

T11mysql> commit;
Query OK, 0 rows affected (0.00 sec)mysql> select * from test;+——+———+| id | version |+——+———+| 1 | 2 || 2 | 1 |+——+———+2 rows in set (0.00 sec)【說明】事務提交,看到最新數據。

通過上面的對比,可以看出mysql默認的隔離級別,也就是reaptable read(重複讀)時,不允許dirty read、nonreaptable read、phantom read的。

此文章驗證了mysql默認的隔離級別所產生的效果,如有不足,歡迎大家指正!共同學習~~~

相關推薦

推薦中...