MySQL不可重複讀與幻讀

2021-10-09 22:00:42 字數 513 閱讀 6815

一直把不可重複讀與幻讀沒搞太明白,有天看到乙個說法覺得挺有道理:

不可重複讀:針對的是單條記錄,另乙個事務修改了本事務讀的記錄,再次讀時,記錄改變了。解決此問題需要行鎖;

幻讀:針對的是整個表,第一次讀9條記錄,第二次讀變成8條或者10條。解決此問題需要表鎖。mysql應該用的mvcc控制。

個人理解:

讀未提交的問題:髒讀、不可重複讀、幻讀

讀已提交的問題:不可重複讀,幻讀

可重複讀的問題:幻讀

既然問題都是讀,那是不是只是針對select呢?

有個面試官問mysql會不會有幻讀,之前一直覺得會有,也試驗過。但是他說不會有。那麼是之前對幻讀理解有問題?之前的理解,查詢資料,發現沒有主鍵為10的記錄,插入一條主鍵為10的記錄,報主鍵衝突,就是幻讀。那這個到底是什麼問題?

我覺得再有人問mysql會不會發生幻讀,應該從上面兩種情況來說,先明確幻讀的定義。如果只是讀的記錄不同為幻讀,那mysql的可重複讀解決了此問題。但是如果也包括插入主鍵衝突的場景,那麼mysql並沒有解決。

髒讀 幻讀與不可重複讀

最近在讀 mysql 技術內幕 innodb 儲存引擎 裡面提到的各種概念都很新鮮,以前聽說過髒讀 幻讀 不可重複讀,但是對於概念不甚了解,於是查了一下,這裡做個筆記。資料庫事務特徵,即 acid a atomicity 原子性事務是乙個原子性質的操作單元,事務裡面的對資料庫的操作要麼都執行,要麼都...

髒讀,不可重複讀,幻讀

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

髒讀 不可重複讀 幻讀

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