innodb 也實現了mvcc ,
對於非鎖定行讀取 即非DML讀取,也可以成爲快照讀取。
在一個事物中 ,事物開始的時候 ,會被分配一個全局的事物id,即把當前系統版本號作爲當前事物的事物id,
這個當前系統版本號 會 隨着 因事物的開啓,和數據的dml 操作而遞增。
而表的 每一行 也有兩個版本號,一個是創建時間,一個是刪除時間,也是系統版本號。
innodb 在讀取的時候,只會讀取 早於 或者等於該事物版本號的 行記錄, 這有一個條件 就是 非鎖定行讀取, 就是平常的 select * from table,
而對於其他的 鎖定行 dml讀取 只會讀取最新的數據行版本,
insert update delete 是鎖定行讀取。
總結 快照讀取 只會讀取 早於等於自己事物版本號的 行記錄。
做個栗子