Oracle資料庫的事務隔離級別

2021-09-01 02:13:39 字數 1766 閱讀 2039

1

、ansi/iso sql92

標準定義了一些資料庫操作的隔離級別: l 

未提交讀(

read uncommitted)

l 提交讀(

read committed)

l 重複讀(

repeatable read)

l 序列化(

serializable)

也就是隔離級別,0,

1,2,

3。ansi/iso sql92

標準有很詳細的說明

隔離級別

0與事務無關,並且不加鎖,也就是說例如

select * from t1

,系統掃瞄過和讀取的每一行都不加鎖。

隔離級別

1與事務無關,只對正在取數的行加鎖,取完數馬上開鎖,也就是說,

begin tran 

然後select * from t1

即使沒有

commit

,鎖也會自動開啟。

隔離級別

2與事務有關,對掃瞄過的地方加鎖。例如,

select * from t1

,系統從第

1行開始掃瞄,掃瞄到第

5行的時候,1到

5行都處於鎖定狀態,直到

commit

,這些鎖才解開。

隔離級別

3與事務有關,對全表加鎖。 2

、各種隔離級別出現的現象

通過一些現象,可以反映出隔離級別的效果。這些現象有:

更新丟失(

lost update

):當系統允許兩個事務同時更新同一資料是,發生更新丟失。

髒讀(dirty read

):當乙個事務讀取另乙個事務尚未提交的修改時,產生髒讀。

非重複讀(

nonrepeatable read

):同一查詢在同一事務中多次進行,由於其他提交事務所做的修改或刪除,每次返回不同的結果集,此時發生非重複讀。

幻讀(phantom read

):同一查詢在同一事務中多次進行,由於其他提交事務所做的插入操作,每次返回不同的結果集,此時發生幻像讀。 3

、oracle

資料庫的三種隔離級別

1). read committed

該隔離級別不允許髒讀

,也不允許重複讀

(即再次讀取時可能會與原來的值不一樣

),並且允許幻像讀

(即再次讀取時新增的資料可以讀取到).

這裡的重複讀和幻像讀均是

oracle

在其內部的一種實現機制

,正常我們執行

select後,

再執行select

不能算做重複讀或幻像讀

,只是在

oracle

內部由於某種原因

,在我們執行

select 

操作後,oracle

在內部幫我們從資料塊中讀取資料時

,讀取到一部分

,發生了一些

oracle

認為有必要重新進行獲取的機制時

,需要重頭開始讀取資料

,這時的讀稱為重複讀!

2).serialable

該隔離級別要求同一會話

session

中的事務是序列化的

,一般都不會用到這種隔離級別.

3).read only

即事務是唯讀的

,不允許

update 

和delete

和insert操作.

ORACLE資料庫事務隔離級別

事務隔離級別 乙個事務對資料庫的修改與並行的另乙個事務的隔離程度。兩個併發事務同時訪問資料庫表相同的行時,可能存在以下三個問題 1 幻想讀 事務t1讀取一條指定where條件的語句,返回結果集。此時事務t2插入一行新記錄,恰好滿足t1的where條件。然後t1使用相同的條件再次查詢,結果集中可以看到...

ORACLE資料庫事務隔離級別

oracle資料庫事務隔離級別 事務隔離級別 乙個事務對資料庫的修改與並行的另乙個事務的隔離程度。兩個併發事務同時訪問資料庫表相同的行時,可能存在以下三個問題 1 幻想讀 事務t1讀取一條指定where條件的語句,返回結果集。此時事務t2插入一行新記錄,恰好滿足t1的where條件。然後t1使用相同...

ORACLE資料庫事務隔離級別

事務隔離級別 乙個事務對資料庫的修改與並行的另乙個事務的隔離程度。兩個併發事務同時訪問資料庫表相同的行時,可能存在以下三個問題 1 幻想讀 事務t1讀取一條指定where條件的語句,返回結果集。此時事務t2插入一行新記錄,恰好滿足t1的where條件。然後t1使用相同的條件再次查詢,結果集中可以看到...