1. 程式人生 > >MYSQL REPEATABLE-READ隔離級別

MYSQL REPEATABLE-READ隔離級別

REPEATABLE-READ 即可重複讀,set autocommit= 0或者START TRANSACTION狀態下select表的內容不會改變。這種隔離級別可能導致讀到的東西是已經修改過的。

比如:

回話一中讀取一個欄位一行a=1 

在回話二里這個欄位該行修改a=0,並且提交

回話一中再update這個欄位a=0,會發現受影響行數是0,這樣就可以根據受影響行數是0還是1判斷此次修改是否成功!

這在某些程式裡會很有用!

會話1:

mysql> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)


mysql> select * from test.dd where id=1;
+----+------+
| id | aa   |
+----+------+
|  1 |    2 |
+----+------+
1 row in set (0.00 sec)

會話2:

mysql> update test.dd set aa=1 where id=1;
Query OK, 1 row affected (0.09 sec)
Rows matched: 1  Changed: 1  Warnings: 0

會話1:

mysql> select * from test.dd where id=1;
+----+------+
| id | aa   |
+----+------+
|  1 |    2 |
+----+------+
1 row in set (0.00 sec)


mysql> update test.dd set aa=1 where id=1;
Query OK, 0 rows affected (0.00 sec)


Rows matched: 1  Changed: 0  Warnings: 0


此處的受影響行數為0,我們可以根據這個值判斷這次update是否成功,這在需要更改某些行的狀態位的時候是比較有用的!