事務隔離性的一些基礎知識

事務隔離性的一些基礎知識
  
           在SQL 2000中是講究事務隔離級別的,分爲以下幾種:(符合SQL 92中定義的事務隔離級別)
[1] READ UNCOMMITTED
[2] READ COMMITTED
[3] REPEATABLE READ
[4] SERIALIZABLE
    其中要特別注意[4],也就SERIALIZABLE,這個才和我們在數據庫原理中學的那個”I”含義一致呢。
    那其它的那些隔離級別又是幹什麼的呢?讓我們先了解以下幾個概念:髒讀,不可重複讀,幻像。
    [1] 髒讀:
    所謂髒讀,就是讀了未提交的數據。舉個例子:B事務讀取了A事務尚未commit的數據,不巧的是,之後A事務rollback了,這就叫髒讀。
    [2] 不可重複讀:
    所謂不可重複讀,就是一個事務多次讀取某一行,但是這一行在多次讀取之中的值不一致(這個事務併爲對這行作任何修改操作)。舉例:A事務多次讀取某一行,在它多次讀取操作之間,B事務修改了這一行,這就是不可重複讀。
    [3] 幻像:
    所謂幻像,在一個尚未提交的事務的讀取的行的範圍中插入新行或刪除現有行。舉例:B事務對A事務讀取的行範圍內插入新行或刪除行,而A事務之後還會訪問這些行(即操作會受到這些行的影響),這樣A事務中就發生了幻像。
    好了,現在我們就可以明確隔離級別中[1]~[4]的含義了:
 
是否可以髒讀
是否可以不可重複讀
是否出現幻像
READ UNCOMMITTED
Y
Y
Y
READ COMMITTED
N
Y
Y
REPEATABLE READ
N
N
Y
SERIALIZABLE
N
N
N
    此表表明瞭從[1]~[4]隔離性逐漸增強,而併發性逐漸減弱,至於應該取用那種隔離級別,就和實際情況有關了。我之前項目中犯的錯誤就是以爲默認就是SERIALIZABLE,而其實在SQL2000中默認是READ COMMITTED。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章