1. 程式人生 > >什麼是髒讀,不可重複讀,幻覺讀?

什麼是髒讀,不可重複讀,幻覺讀?

  髒讀:瞭解這個之前,首先要了解什麼是髒資料。

 髒資料是指源系統中的資料不在給定的範圍內或對於實際業務毫無意義,或是資料格式非法,以及在源系統中存在不規範的編碼和含糊的業務邏輯

  髒讀在資料庫技術中,髒資料在臨時更新( 髒讀)中產生。事務A更新了某個資料項X,但是由於某種原因,事務A出現了問題,於是要把A回滾。但是在回滾之前,另一個事務B讀取了資料項X的值(A更新後),A回滾了事務,資料項恢復了原值。事務B讀取的就是資料項X的就是一個“臨時”的值,就是髒資料。

  通俗的講,當一個事務正在訪問資料,並且對資料進行了修改,而這種修改還沒有提交到資料庫中,這時,另外一個事務也訪問這個資料,然後使用了這個資料。因為這個資料是還沒有提交的資料,那麼另外一個事務讀到的這個資料是髒資料,依據髒資料所做的操作可能是不正確的。

 不可重複讀:是指在資料庫訪問中,一個事務範圍內兩個相同的查詢卻返回了不同資料。
這是由於查詢時系統中其他事務修改的提交而引起的。比如事務T1讀取某一資料,事務T2讀取並修改了該資料,T1為了對讀取值進行檢驗而再次讀取該資料,便得到了不同的結果。

一種更易理解的說法是:在一個事務內,多次讀同一個資料。在這個事務還沒有結束時,另一個事務也訪問該同一資料。那麼,在第一個事務的兩次讀資料之間。由於第二個事務的修改,那麼第一個事務讀到的資料可能不一樣,這樣就發生了在一個事務內兩次讀到的資料是不一樣的,因此稱為不可重複讀,即原始讀取不可重複

幻覺讀:指當事務不是獨立執行時發生的一種現象,例如 第一個事務對一個表中的資料進行了修改,這種修改涉及到表中的全部資料行。同時,第二個事務也修改這個表中的資料,這種修改是向表中插入一行新資料。那麼,以後就會發生操作第一個事務的使用者發現表中還有沒有修改的資料行,就好像發生了幻覺一樣