既然MySQL有事物隔離性,那為什麼還會產生髒讀?

時間 2021-06-07 22:22:52

1樓:王醫生

假設某個事務有5條sql語句

3寫2讀

讀未提交的時候只在寫的時候加行鎖,其他事務是可以直接讀到這個事務寫的東西的這就是髒讀

解決辦法要麼是整個事務加鎖,其他事務要完全等待這就是序列化要麼MVCC做版本號映象,這樣可以增加一些讀的併發

2樓:萌豆

我覺得你可能搞錯了因果順序,我理解正是因為同時讀寫,通過推導出會有髒讀、髒寫、幻讀、不可重複讀等各種情況,所以才總結和抽象定義出一整套事務機制和隔離性等資料庫理論,然後在資料庫中實現。在這樣的體系下可以使用者自主選擇合適的隔離性來保障業務語義,平衡效能需求。

從業務語義上顯然不能接受髒讀存在,但在事務體系下是可以實現的,有這個能力。

3樓:乙隻小菜雞

事務有隔離性,但是隔離性也分大小,這就是事務的隔離級別。

假如所有事務都是最高的隔離級別(seriliazable),意味著事務的序列化執行,那麼當然不會產生髒讀了。

但是如果資料庫只有這麼嚴厲的隔離等級,效能會如何呢?讀寫操作都序列執行,資料庫吞吐量該有多低啊。所以為了效能考慮,需要稍微放寬一些對隔離性的要求,而資料庫因此分為4個隔離級別。

那麼事務的隔離是如何實現的呢?不同隔離級別又有什麼異同呢?如果你還想深入了解的話,就買一本姜承堯老師的《MySQL技術內幕:InnoDB儲存引擎》,自己讀一讀吧!

4樓:jaybril

這個事情不能簡單的一概而論,還得結合鎖和MVCC相關的知識來分析

乙個select操作

如果不加鎖(普通的select等),稱為快照讀,讀取的是MVCC版本鏈裡的快照版本(至於讀哪一版本的資料,就得看隔離級別了)

如果加了鎖(如select for update等),稱為當前讀,讀取的是最新版本(也就是別的事務提交的版本)

所以這樣就很清晰了:

在事務隔離級別為讀未提交的情況下,事務B讀取到的可能是事務A未提交的存在於版本鏈裡的資料,這樣就是髒讀了。

有人可能是資料不是加鎖了嗎,為啥還能讀?

我讀取的是版本鏈裡的資料,你加鎖是加在最新落庫的資料表裡的表記錄,跟我有什麼關係?

所以最終結果就很清楚了,並不是一級封鎖協議不能避免度髒資料,想下面這兩周情況就不會發生髒讀:

1)在非讀未提交(讀已提交、可重複讀、序列化)隔離別下,不會出現髒讀

2)在select加鎖的情況下,不管什麼級別,也不會出現髒讀

既然勒貝格積分是黎曼積分的改進,那為什麼還要學黎曼積分?淘汰黎曼積分,直接學勒貝格積分不好嗎?

蘇劍林 黎曼積分比勒貝格積分直觀,而且也不是說勒貝格積分就一定比黎曼積分強,可以參考 為什麼勒貝格積分比黎曼積分強?科學空間 Scientific Spaces Sunbelt 不談數學內容,講個事實 北師大數學那邊曾經有幾屆我記得王崑揚老師就是這麼安排的分析課程,不講黎曼積分,直接講的勒貝格積分,...

愚笨,既然佛學說世間是虛無縹緲的,那為什麼還要吃素,葷和素不是是境由心生,為啥要吃素呢?

酒肉穿腸過,佛祖心中坐。世人若學我,如同進魔道。修行絕大部分是拾級而上的,未到那個境界,分什麼葷素,好比在小學 初中 高中 大學裡學習,同一道題的解法是不一樣的。 凱爾 佛說空性,不是說世間虛無縹緲。空性是為了讓我們不執著,執著to be是執著,執著not to be也是執著,真正放下對to be和...

既然古書很多都沒有真正流傳下來,那為什麼還要研究?

小菜想學習 弘揚中華民族優秀文化傳統,必須研究五千年不間斷的中國歷史。中國文獻古籍浩如煙海,所記內容既有物質文明,也有精神文明,都是中華各族人民集體創造的結晶,許多優秀文化傳統在當代仍有重要意義。 雨顧涼 中華文化博大精深,如果只研究實際存在的書籍,只是冰山一角而已。讀書不只是數量,研究也不僅僅是觀...