資料庫隔離級別 對應封鎖協議

2021-12-30 09:10:29 字數 592 閱讀 7242

1.讀未提交(read uncommit)

一級封鎖協議(讀取資料的時候不加鎖,更新的時候整個加x鎖)

b事物執行到一半,a事物不檢測鎖直接讀取,結果b事物回滾了,導致a事物讀出了乙個錯的結果,這就是髒讀。

2.讀已提交(read committed)

二級封鎖協議(讀取資料的時候加s鎖,更新的時候加x鎖)

a事物每次讀取的時候都會嘗試獲取s鎖,如果b事物在更新,則a阻塞等待b事物釋放。

解決了髒讀的問題。

因為a讀取完畢以後直接釋放,如果a事物有兩次讀取操作,而在這期間b更新了資料,

會導致兩次結果不一樣。這就是不可重複讀

3.可重複讀(repeatable read)

**封鎖協議(對讀取資料的整個事務加s鎖,更新的時候整個加x鎖)

因為a讀取操作整個加了s鎖,所以在此期間b事物不能獲得x鎖。這樣就解決了不可重複讀問題。

幻讀a在讀表的時候,b往表裡刪除行,導致a統計的結果和表裡現在的不一致,好像發生了幻覺。(幻讀**於表行的增加或刪除,解決幻讀只能對錶加鎖)

4.序列化(sirializable)

鎖全表(事物不併發執行)

解決了幻讀現象。

MySQL隔離級別和封鎖協議

一直以來對資料庫的事務隔離機制的理解總是停留在表面,其內容也是看一遍忘一邊。這兩天決定從原理上理解它,整理成自己的知識。查閱資料的過程中發現好多零碎的概念如果串起來足夠寫一本書,所以在這裡給自己梳理乙個脈絡,具體的內容參考引文或在網上搜一下。由於平時接觸最多的是mysql,所以文章中某些部分是mys...

資料庫隔離級別對巢狀事務的影響

最近做了乙個區塊鏈資料相關的專案,業務系統需要跟區塊鏈上資料同步,在測試環境沒有任何問題,部署到成員方之後突然出現資料同步失敗。仔細分析了業務 沒有發現任何異常,對比了各種環境之後,發現只有資料庫事務隔離級別不同,懷疑是隔離級別導致。整個資料同步流程的事務情況為 1.對每個塊開啟乙個外層事務。2.迴...

資料庫三個級別封鎖協議

鎖的型別 基本的封鎖型別有兩種 排它鎖 x鎖 和共享鎖 s鎖 所謂x鎖,是事務t對資料a加上x鎖時,只允許事務t讀取和修改資料a,所謂s鎖,是事務t對資料a加上s鎖時,其他事務只能再對資料a加s鎖,而不能加x鎖,直到t釋放a上的s鎖。若事務t對資料物件a加了s鎖,則t就可以對a進行讀取,但不能進行更...