Oracle數據庫事務隔離級別

事務隔離級別:一個事務對數據庫的修改與並行的另外一個事務的隔離程度。數據庫

兩個併發事務同時訪問數據庫表相同的行時,可能存在如下三個問題:併發

一、幻想讀:事務T1讀取一條指定where條件的語句,返回結果集。此時事務T2插入一行新記錄,剛好知足T1的where條件。而後T1使用相同的條件再次查詢,結果集中能夠看到T2插入的記錄,這條新紀錄就是幻想。事務

二、不可重複讀取:事務T1讀取一行記錄,緊接着事務T2修改了T1剛剛讀取的記錄,而後T1再次查詢,發現與第一次讀取的記錄不一樣,這稱爲不可重複讀。並行

三、髒讀:事務T1更新了一行記錄,還未提交所作的修改,這個T2讀取了更新後的數據,而後T1執行回滾操做,取消剛纔的修改,因此T2所讀取的行就無效,也就是髒數據。數據

爲了處理這些問題,SQL標準定義瞭如下幾種事務隔離級別查詢

READ UNCOMMITTED 幻想讀、不可重複讀和髒讀都容許。

READ COMMITTED 容許幻想讀、不可重複讀,不容許髒讀

REPEATABLE READ 容許幻想讀,不容許不可重複讀和髒讀

SERIALIZABLE 幻想讀、不可重複讀和髒讀都不容許

Oracle數據庫支持READ COMMITTED 和 SERIALIZABLE這兩種事務隔離級別。因此Oracle不支持髒讀

SQL標準所定義的默認事務隔離級別是SERIALIZABLE,可是Oracle 默認使用的是READ COMMITTED

設置隔離級別使用 SET TRANSACTION ISOLATION LEVEL [READ UNCOMMITTED|READ COMMITTED|REPEATABLE READ|SERIALIZABLE]

相關文章
相關標籤/搜索