可重複讀級別下,在事務執行期間,即使其他事務修改了資料,該事務看到的仍然跟啟動是看到的一樣。
但是,如果乙個事務要更新一行資料,這時剛好有另乙個事務擁有這一行的行鎖,那本事務就會進入鎖等待狀態。
問題:該事務獲取到行鎖,要更新資料時,這時候,它讀的資料值是什麼呢?
答:更新資料的時候,都是先讀後寫,這個讀,只能讀當前值,成為「當前讀」。
另一種情況:事務中,查詢語句如果加了讀鎖(s鎖,共享鎖)或者寫鎖(x鎖,排它鎖),則讀的是當前值。
如下兩條查詢語句:
mysql> select k from t where id=1 lock in share mode;
mysql> select k from t where id=1 for update;
這種場景下,就會出現另一篇博文中講的併發事務問題,裡面提到了解決方案,鏈結如下:
擴充套件知識
mysql中,有兩個檢視的概念:
view: 它是乙個用查詢語句定義的虛擬表,建立語法 create view ..., 而它的查詢方法與表是一樣的;
一致性讀檢視:用於支援rc(read commit,讀提交)和rr(repeatable read可重複讀)隔離級別的實現。
Mysql學習筆記 事務的隔離
可重複讀隔離級別的理解,事務 t 啟動的時候會建立乙個檢視 read view,之後事務 t 執行期間,即使有其他事務修改了資料,事務 t 看到的仍然跟在啟動時看到的一樣。也就是說,乙個在可重複讀隔離級別下執行的事務,好像與世無爭,不受外界影響。這個技術在mvcc中或許可以是這樣理解的。但是如果是在...
MySQL學習筆記 事務和隔離級別
在資料庫操作中,為了有效保證併發讀取資料的正確性,提出的事務隔離級別。我們的資料庫鎖,也是為了構建這些隔離級別存在的。總共有4種 1.未提交讀 read uncommitted 允許髒讀,也就是可能讀取到其他會話中未提交事務修改的資料 2.提交讀 read committed 只能讀取到已經提交的資...
MySQL鎖與事務隔離
1.排他鎖 x鎖 解決多個程式同時修改乙個資料,造成的資料丟失問題。read uncommitted 讀未提交 存在髒讀問題 2.共享鎖 s鎖 解決髒讀問題 甲修改了資料,卻沒有將資料提交或回滾了資料,乙讀到了甲修改後的 錯誤的資料 而不是資料庫中現在真實存在的資料約定 read committed...