SELECT:
InnoDB只查找版本早于当前事务版本的数据行,这样可以确保事务读取的行,要么是事务开始前已经存在,要么是事务自身插入或者修改过的。
行的删除版本要么未定义,要么大于当前的事务版本号。确保事务读取到的行,在事务开始之前没有被删除。
INSERT:InnoDB为新插入的每一行保存当前系统版本号作为行版本号。
DELETE:InnoDB为删除的每一行保存当前系统版本号作为行删除标识。
UPDATE:InnoDB为插入一行新纪录,保存当前系统版本号为行版本号,同时保存当前系统版本号到原来的行作为行删除标志。
保存这两个额外系统版本号,使大多数读操作都可以不用加锁。不足的就是每行记录都需要额外的存储空间和更多的检查维护工作。