髒讀 不可重複讀 幻讀(虛讀)

2022-05-09 06:24:08 字數 1116 閱讀 1558

事務併發下出現的問題

髒讀: (讀取了未提交的新事物,然後被回滾了)mysql不支援髒讀

髒讀是指在乙個事務處理過程裡讀取了另乙個未提交的事務中的資料。

事務a讀取了事務b中尚未提交的資料。如果事務b回滾,則a讀取使用了錯誤的資料。

比如我給你轉了100萬,但是我還沒有提交,此時你查詢自己賬戶,多了100萬,很開心。然後我發現轉錯人了,回滾了事物。然後你100萬就沒了。  在過程中你查到了沒有提交事物的資料(多出的100萬),這就是髒讀。

不可重複讀: (讀取了提交的新事物,指更新操作)

不可重複讀是指在對於資料庫中的某個資料,乙個事務範圍內多次查詢卻返回了不同的資料值,這是由於在查詢間隔,被另乙個事務修改並提交了。

不可重複讀和髒讀的區別是:髒讀是某一事務讀取了另乙個事務未提交的髒資料,而不可重複讀則是讀取了前一事務提交的資料。

在某些情況下,不可重複讀並不是問題,比如我們多次查詢某個資料當然以最後查詢得到的結果為主。但在另一些情況下就有可能發生問題,例如同乙個事物前後兩次查詢同乙個資料,期望兩次讀的內容是一樣的,但是因為讀的過程中,因為令乙個資料寫了該資料,導致不可重複讀。

幻讀:(也是讀取了提交的新事物,指增刪操作)幻讀也是虛讀

幻讀是事務非獨立執行時發生的一種現象。幻讀和不可重複讀都是讀取了另一條已經提交的事務(這點就髒讀不同),所不同的是不可重複讀查詢的都是同乙個資料,而幻讀針對的是一批資料整體(比如資料的個數)。

幻讀是指當事務不是獨立執行時發生的一種現象,例如第乙個事務對乙個表中的資料進行了修改,這種修改涉及到表中的全部資料行。 同時,第二個事務也修改這個表中的資料,這種修改是向表中插入一行新資料。那麼,以後就會發生操作第乙個事務的使用者發現表中還有沒有修改的資料行,就好象 發生了幻覺一樣。例如,乙個編輯人員更改作者提交的文件,但當生產部門將其更改內容合併到該文件的主複本時,發現作者已將未編輯的新材料新增到該文件中。 如果在編輯人員和生產部門完成對原始文件的處理之前,任何人都不能將新材料新增到文件中,則可以避免該問題。

髒讀,不可重複讀,幻讀

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

髒讀 不可重複讀 幻讀

髒讀 事務a使用了資料,但是還沒來得及提交,事務b就使用了這個資料,對於事務b來說就是髒讀。允許髒讀 sql server select from category with nolock 不可重複讀 事務a在9點和12點都會操作乙份資料,但是在10點的時候,事務b也操作了該份資料,並且使其數值進行...

髒讀 不可重複讀 幻讀

總結 對於不可重複讀和幻讀的區別是 不可重複讀圈了一塊地,這塊地不允許任何人動用,但是不管旁邊的地方是否開闢了一塊地。幻讀是不僅是圈的地,而且附近也不允許有新的地。這個對於區間查詢會有影響。所以不可重複讀和幻讀最大的區別是區間查詢的結果會不會一樣。幻讀保證結果一樣,但是不可重複讀不保證。mysql的...