InnoDB的行数据有多个版本,每个数据版本有自己的row_trx_id,每个语句或者语句有自己的一致性视图。普通查询语句是一致性读,一致性读会根据row_trx_id和一致性视图确定数据版本的可见性
- 对于可重复读,查询只承认在事务启动前就已经提交完成的数据
- 对于读提交,查询只承认在语句启动前就已经提交完成的数据
而当前读,总是读取已经提交完成的最新版本。
为什么表结构不支持可重复读?因为表结构没有对应的行数据,也没有row_trx_id,只能遵循当前读的逻辑
MySQL已经可以把表结构放在InnoDB字典里了,也许以后会支持表结构的可重复读