三.事務隔離

  1. 事務的隔離級別
    1. 讀未提交(read uncommited) 一個事務還沒提交時,它做的變更就能被別的事務看到
    2. 讀提交(read commited) 一個事務提交之後,它做的變更纔會被其他事務看到。
    3. 可重複讀(repeatable read) 一個事務執行過程中看到的數據,總是跟這個事務在啓動時看到的數據是一致的。當然在可重複讀隔離級別下,未提交變更對其他事務也是不可見的。
    4. 串行化(serializable )顧名思義是對於同一行記錄,“寫”會加“寫鎖”,“讀”會加“讀鎖”。當出現讀寫鎖衝突的時候,後訪問的事務必須等前一個事務執行完成,才能繼續執行
  2. 舉例講講你對隔離級別的認識
    在這裏插入圖片描述
    我們來看看在不同的隔離級別下,事務 A 會有哪些不同的返回結果,也就是圖裏面 V1、V2、V3 的返回值分別是什麼。
  • 若隔離級別是“讀未提交”, 則 V1 的值就是 2。這時候事務 B 雖然還沒有提交,但是結果已經被 A 看到了。因此,V2、V3 也都是 2。
  • 若隔離級別是“讀提交”,則 V1 是 1,V2 的值是 2。事務 B 的更新在提交後才能被 A 看到。所以, V3 的值也是 2。
  • 若隔離級別是“可重複讀”,則 V1、V2 是 1,V3 是 2。之所以 V2 還是 1,遵循的就是這個要求:事務在執行期間看到的數據前後必須是一致的。
  • 若隔離級別是“串行化”,則在事務 B 執行“將 1 改成 2”的時候,會被鎖住。直到事務 A 提交後,事務 B 纔可以繼續執行。所以從 A 的角度看, V1、V2 值是 1,V3 的值是 2。
  1. Oracle,MySQL的默認隔離級別?
  • MySQL:可重複讀
  • Oracle: 讀提交
  1. 數據庫的多版本併發控制(MVCC) 是指?
    在這裏插入圖片描述
    假設一個值從 1 被按順序改成了 2、3、4,在回滾日誌裏面就會有類似上面的記錄,當前值是 4,但是在查詢這條記錄的時候,不同時刻啓動的事務會有不同的 read-view。如圖中看到的,在視圖 A、B、C 裏面,這一個記錄的值分別是 1、2、4,同一條記錄在系統中可以存在多個版本,就是數據庫的多版本併發控制(MVCC)。對於 read-view A,要得到 1,就必須將當前值依次執行圖中所有的回滾操作得到。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章