程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 淺析MYSQL REPEATABLE-READ隔離級別,repeatableread

淺析MYSQL REPEATABLE-READ隔離級別,repeatableread

編輯:MySQL綜合教程

淺析MYSQL REPEATABLE-READ隔離級別,repeatableread


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

會話3:

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是否成功,這在需要更改某些行的狀態位的時候是比較有用的!


教一個對於MySql事務隔離級別的問題

MySQL的InnoDB表有
transaction-isolation =
READ-UNCOMMITTED
READ-COMMITTED
REPEATABLE-READ
SERIALIZABLE
4個
MyIsam沒有,
你看下你的表的Enginee是什麼類型的
 

數據庫,mysql事務隔離級別repeatable-read 詳解

第一個問題:
新版本的mysql通過mvcc解決了幻讀的問題,所以你沒有看到的幻讀現象

第二個問題:
B事務是沒有辦法看到A事務所做的改變,除非你的B事務的級別低於repeatable-read
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved