資料庫幻讀 髒讀 不可重複讀

2021-09-01 22:45:07 字數 951 閱讀 6722

要理解幻讀、髒讀、不可重複讀,必須先搞清楚事務的隔離級別

資料庫事務的隔離級別有4個,由低到高依次為read uncommitted 、read committed 、repeatable read 、serializable ,這四個級別可以逐個解決髒讀 、不可重複讀 、幻讀 這幾類問題。

隔離級別

髒讀不可重複讀

幻讀read uncommitted√√

√read committed×√

√repeatable read××

√serializable××

×當乙個事務正在訪問資料,並且對資料進行了修改,而這種修改還沒有提交到資料庫中,這時,另外乙個事務也訪問這個資料,然後使用了這個資料。

髒讀就是讀到其他事務未提交的資料

資料庫的事務預設一般都是read committed,所以髒讀現象很少發生

在乙個事務內,對同一條資料進去讀取,第一次讀取到的資料和第二次讀取到的資料不一致

產生不可重複讀的原因是,在兩次讀取資料之間,資料被其他事務修改了;第二次讀取的時候,讀取到了其他事務已提交的資料,發現前後兩次資料不一致了(即不能讀到相同的資料)

解決辦法

解決辦法是,在第一次讀取時,就鎖定資源,不讓其他事務修改

已讀取的資料,在事務過程中被其他事務修改,在本事務兩次讀取的資料不一致

在乙個事務內,第一次讀取到的資料條數和第二次讀取到的資料條數不一致

產生幻讀的原因是:在兩次讀取資料之間,其他資料插入了新的資料;第二次讀取到的資料總數和第一次不一致(就像幻覺一樣)

解決辦法

幻讀現象一般不解決,在業務**上做判斷即可;如果一定要解決,就只能鎖定所有相關的資源,鎖表或者增加分布式鎖,插入時也必須得到鎖才能操作

髒讀很好理解,就是讀到其他事務未提交的資料

那麼不可重複讀和幻讀到底有什麼區別呢,看起來好像差不多

資料庫髒讀 不可重複讀 幻讀

資料庫髒讀 不可重複讀 幻讀 1.髒讀 髒讀就是指當乙個事務正在訪問資料,並且對資料進行了修改,而這種修改還沒有提交到資料庫中,這時,另外乙個事務也訪問這個資料,然後使用了這個資料。2.不可重複讀 是指在乙個事務內,多次讀同一資料。在這個事務還沒有結束時,另外乙個事務也訪問該同一資料。那麼,在第乙個...

資料庫髒讀,幻讀,不可重複讀

指乙個事務a正在訪問資料,並且對該資料進行了修改,但是這種修改還沒有提交到資料庫中 也可能因為某些原因rollback了 這時候另外乙個事務b也訪問這個資料,然後使用了這個被a修改的資料,那麼這個資料就是髒的,並不是資料庫中真實的資料。這就被稱作髒讀。解決辦法 把資料庫事務隔離級別調整到read c...

髒讀,不可重複讀,幻讀

髒讀,不可重複讀,幻讀是由於資料庫事務的隔離性導致的問題。髒讀 乙個事務讀取到了其它未提交事務操作的記錄。不可重複讀 乙個事務a內,首次查詢到一條相同記錄,然後事務b修改該條記錄並提交,事務a再次執行相同查詢,得到了事務b更新後的結果,事務a兩次相同的查詢,卻得到了不同的結果,這個叫做不可重複讀。是...