事務隔離級別:一個事務對數據庫的修改與並行的另外一個事務的隔離程度。數據庫
兩個併發事務同時訪問數據庫表相同的行時,可能存在如下三個問題:併發
一、幻想讀:事務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]