資料庫的隔離級別

2021-08-27 19:43:16 字數 1332 閱讀 8125

關於資料庫的事務的特性(acid):

1:atomicity(原子性):多個操作為乙個單元不可分割,要麼都成功要麼都失敗.

2:consitency(一致性):事務結束後,系統的狀態是一致的。(一致性處理資料庫中所有約束保護)

例如:如果2個表有主外來鍵約束,如果我要刪除主表的資料,那麼從表的資料也應該被刪除.

3:isolation(隔離性):保護2個同時進行的事務,彼此間無法看到中間結果.

例如:如果有個2個事務,a,b,如果a中的資料還沒有提交,在b這個事務中是無法看到a所處理過程中的資料變化的。

4:durability(穩定性):保證資料更新時免遭破壞,保證資料能寫正確到資料庫的檔案中。

資料庫的隔離級別:

[table]

| 名稱 ||髒讀||不可重複讀||幻讀||鎖級別||效能|

|read_uncommitted|| y || y || y || 無 ||最好|

|read_committed|| n || y || y || 行級鎖 ||其次|

|repeatable_read|| n || n || y || 行級鎖 ||較差|

|serializable|| n || n || n || 表級鎖 ||最差|

[/table]

不可重複讀:

假如我有乙個頁面,一次性讀取了5條資料,其中其中有一列值為123,可能下一次重新整理的時候這列的值就變成345了(別人修改了這個資料),這個就叫做不可重複讀,因為以前的值不見了。

幻讀:幻讀主要是面向新增特性的,假如我有乙個頁面一次性可以展示10條,第一次重新整理的時候可能只有5條,第二次重新整理的時候,就出現了10條,另外的5條就是別人通過應用新增進來的,這種就叫幻讀。

如在hibernate中的給出的併發解決方案,悲觀鎖和樂觀鎖,其實就是相對隔離級別來說的。

樂觀鎖:相當於隔離級別的read_committed

悲觀鎖:相當於隔離級別的serializable

事務的傳播特性:

主要是用來描述事務的屬性,事務的屬性有6種:

1:required

如果客戶端有事務那麼久加入該事務,如果沒有事務則新啟乙個事務。

例如:a}b

}在a1方法中如果存在事務,如 tx=*****.gettransaction();

則在調b1的時候,就會b1則會加入到這個事務中。

如果在a1中沒有事務,那麼在b1方法中,就會自己開啟乙個事務。

2:requirednew

新建事務,如果當前存在事務,把當前事務掛起。

例如:a}b

}如果a1,和b1都有開啟事務,那麼當在執行b1的時候,a1的事務會被掛起,當b1執行完畢,繼續執行a1的事務。

資料庫隔離級別

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...