不可重複讀,可重複讀,幻讀,MVCC概念理解

2021-10-11 17:36:24 字數 636 閱讀 3911

是指在乙個事務內,多次讀同一資料。在這個事務還沒有結束時,另外乙個事務也訪問該同一資料。那麼,在第乙個事務中的兩次讀資料之間,由於第二個事務的修改,那麼第乙個事務兩次讀到的資料可能是不一樣的。這樣就發生了在乙個事務內兩次讀到的資料是不一樣的,因此稱為是不可重複讀。

(前提是非序列化)乙個事務在執行過程中可以看到其他事務已經提交的新插入的記錄(讀已經提交的,其實是讀早於本事務開始且已經提交的),但是不能看到其他事務對已有記錄的更新(即晚於本事務開始的)。

innodb 的可重複讀的實現,利用了實現mvcc技術的快照技術。

使用mvcc(多版本併發控制)。innodb為每行記錄新增了乙個版本號(系統版本號),每當修改資料時,版本號加一。在讀取事務開始時,系統會給事務乙個當前版本號,事務會讀取版本號<=當前版本號的資料,這時就算另乙個事務插入乙個資料,並立馬提交,新插入這條資料的版本號會比讀取事務的版本號高,因此讀取事務讀的資料還是不會變。

如果資料庫併發控制引擎是單純的封鎖協議機制,則應該在讀取資料的時候,判斷資料項是不是其他事務更新過的。可是innodb沒有這麼做,而是通過如下方式,在rr隔離級別下為事務設定了乙個「一致性讀檢視(即快照)」,之後讀取資料,就是根據這個快照來獲取,這樣&

髒讀 幻讀 不可重複讀和可重複讀

github 髒讀 幻讀 不可重複讀和可重複讀 即acid 隔離級別 髒讀 dirty read 不可重複讀 nonrepeatable read 幻讀 phantom read 未提交讀 read uncommitted 可能可能 可能已提交讀 read committed 不可能可能 可能可重複...

髒讀,不可重複讀,幻讀

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

髒讀 不可重複讀 幻讀

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