天天看點

什麼是MySQL一緻性讀

兩階段鎖協定

在 InnoDB 事務中,行鎖是在需要的時候才加上的,但并不是不需要了就立刻釋放,而是要等到事務結束時才釋放。這個就是兩階段鎖協定。

手動開啟事務的三種方式

begin/start transaction和 start transaction with consistent snapsh差別

begin/start transaction 指令并不是一個事務的起點,在執行到它們之後的第一個操作 InnoDB 表的語句,事務才真正啟動。

如果你想要馬上啟動一個事務,可以使用 start transaction with consistent snapshot 這個指令。

第一種啟動方式,一緻性視圖是在執行第一個快照讀語句時建立的;

第二種啟動方式,一緻性視圖是在執行 start transaction with consistent snapshot 時建立的。

可重複讀

在可重複讀隔離級别下,隻需要在事務開始的時候建立一緻性視圖,之後事務裡的其他查詢都共用這個一緻性視圖;

對于可重複讀

更新資料都是先讀後寫的,而這個讀,隻能讀目前的值,稱為“目前讀”(current read)。

可重複讀的核心就是一緻性讀(consistent read);而事務更新資料的時候,

隻能用目前讀。如果目前的記錄的行鎖被其他事務占用的話,就需要進入鎖等待。

對于可重複讀,查詢隻承認在事務啟動前就已經送出完成的資料;

讀送出

繼續閱讀