資料庫隔離級別

2021-10-12 17:23:07 字數 1323 閱讀 9949

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)

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

解決了幻讀現象。

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)

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

解決了幻讀現象。

資料庫隔離級別

read uncommited 讀未提交 最低級別,可讀取未提交事物的資料,這會導致髒讀,比如 某時刻會話a修改了乙個資料,但還未提交,此時會話b,讀取了該資料,這是,會話a回滾了事物,這就導致資料出現了不一致狀態,這就是髒讀 read commited 提交讀 避免了髒讀,但會導致不可重複讀,例如...

資料庫隔離級別

資料庫事務的隔離級別有4個,由低到高依次為read uncommitted read committed repeatable read serializable,這四個級別可以逐個解決髒讀 不可重複讀 幻讀這幾類問題。可能出現 不會出現 髒讀 不可重複讀 幻讀read uncommitted re...

資料庫隔離級別

資料庫事務的隔離級別有4個,由低到高依次為read uncommitted read committed repeatable read serializable,這四個級別可以逐個解決髒讀 不可重複讀 幻讀這幾類問題。可能出現 不會出現 髒讀不可重複讀 幻讀read uncommitted rea...