MVCC
MVCC細節太多,我直接備忘一下總結:
MVCC就是通過事務的ID與行數據的版本(修改事務的ID)進行比較(通過redo log可以回溯版本)得出哪些版本的行數據可見和不可見而實現的事務隔離
一致性讀
可重複讀,查詢只承認在事務啓動前就已經提交完成的數據
讀提交,查詢只承認在語句啓動前就已經提交完成的數據
自己版本更新的總可見(版本=事務/語句)
其他版本未提交的不可見
版本已經提交,但是是在當前版本之後創建的不可見
版本已經提交,但是在當前版本開始前提交的可見(雖然都提交,但是創建視圖的點不同)
更新
更新操作中的讀,只能是當前讀,已經提交完成的最新版本,或者遇到行鎖阻塞
開啓事務
對於可重複讀
1、start transaction 開始事務的語句事務開啓點是在不是這句,而是第一個執行sql語句的地方
2、start transaction with consistent snapshot 開始事務的語句事務開啓點在這這句
對於讀提交
start transaction 和 start transaction with consistent snapshot都是以每條語句的執行創建視圖