淺談 oracle事務隔離級別

2021-08-29 13:20:07 字數 991 閱讀 1934

oracle 支援的 2 種事務隔離級別 read committed 和 serializable

根據官方資料,它們的區別如下:

動作 read committed serializable

dirty write not possible not possible

dirty read not possible not possible

nonrepeatable read possible not possible

phantoms possible not possible

read committed 是預設的隔離級別。

對於read committed ,事務中的查詢只能看到在此查詢之前( 而非事務開始之前 )提交的資料。 由於 oracle 不會因為查詢資料而阻止另外乙個事務修改資料,因此資料可以在乙個事務中的 2 次查詢中,查到不同的結果。因此 可能出現 nonrepeatable read and phantoms 的情況

對於serializable transactions ,當2次執行同一條查詢語句的時候(就是兩次執行查詢,就是說執行完第乙個 .executequery ,然後執行第二個 .executequery ),如果在第乙個 .executequery 開始執行而另外乙個事務已經開始修改資料,並且已經提交,那麼兩次讀取的資料是另外乙個事務修改前的資料。如果在第乙個 .executequery 之前,另外乙個事務修改了資料,那麼兩次讀取的資料是另外乙個事務修改後的資料。

這恰恰反映了, repeatable read ,兩次結果一致

這與 read committed 完全不同, 要是 read committed ,第乙個 .executequery 未執行完第二事務,而在第二個 .executequery 前第二個事務執行完畢,那麼第乙個 .executequery 得到的是初始資料,而第二個 .executequery 得到的是修改後的資料

恰恰說明了 nonrepeatable read ,兩次結果不一致的情況

Oracle 事務隔離級別

先看一張concepts中關於事務隔離級別的一張 從上圖可以看到 通常事務的隔離級別定義為以下4種 基於3種在併發事務中需要避免的現象來劃分的 1.read uncommitted 從字面意義可以看出,讀取那些未提交的資料。事務1在事務進行過程中,會讀到事務2修改了但是沒有提交的資料,所以產生了 髒...

Oracle事務隔離級別

髒讀 dirty read 當乙個事務讀取另乙個事務尚未提交的修改時,產生髒讀。不可重複讀 nonrepeatable read 同一查詢在同一事務中多次進行,在此期間,由於其他事務提交了對資料的修改或刪除,每次返回不同的結果。幻讀 phantom read 同一查詢在同一事務中多次進行,由於其他提...

Oracle事務隔離級別

一 事務四個性質 acid 1 原子性 atomaicity 乙個事務是乙個不可分割的單元。2 一致性 consistency 事務的原子性保證的事務的一致性。3 隔離性 isolation 三種現象 1 髒讀 即讀出其它事務未提交的資料。2 不可重複讀 乙個事務,兩個不同時間,讀取的資料不同,被他...