資料庫避免髒讀,幻讀

2022-09-20 12:42:11 字數 650 閱讀 2556

一、髒讀

乙個事務讀取到了另外乙個事務沒有提交的資料

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

解決: 

修改時加排他鎖,直到事務提交後才釋放,

讀取時加共享鎖,讀取完釋放事務1讀取資料時加上共享鎖後(這樣在事務1讀取資料的過程中,其它事務就不會修改該資料的),不允許任何事務操作該資料,只能讀取,之後1如果有更新操作,那麼會轉換為排他鎖,其他事務更無權參與進來讀寫,這樣就防止了髒讀問題。

但是當事務1讀取資料過程中,有可能其他事務也讀取到了該資料,讀取完畢後共享鎖釋放,此時事務1修改資料,修改完畢提交事務,其他事務再次讀取資料時候發現資料不一致,就會出現不可重複都問題,所以這樣不能避免不可重複讀問題。

二、不可重複讀/幻讀

不可重複讀:在統一事務中,兩次讀取同一資料,得到內容不同

幻讀: 再同一事務中,用同樣的操作讀取了兩次,得到的紀錄數不相同

解決:讀取資料時加共享鎖,寫資料時加排他鎖,都是事務提交才釋放鎖。讀取時候不允許其他事務修改該資料,不管資料在事務過程中讀取多少次,資料都是一致的,避免了不可重複讀問題

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

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

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

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

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

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