天天看點

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

事務隔離性的一些基礎知識                在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。