【关于innodb的read-view的一点理解】
- InnoDB 的read-view的建立,是从事务begin后,发送第一个select的时候建立的,而不是begin的时候建立的,
也就是说,在发送第一个SQL后,事务才被赋予了一个transactionID,才建立了它的read-view,才决定了它能看到哪些版本的数据,不能看到哪些版本
至于begin, 在这方面并没有什么实际意义
- 一旦事务A被赋予了一个transactionID,就会确定一个它相关的read-view,并且一直保持不变
read-view的可见原则是“在事务A发送第一个SQL的时候,还没完成commit的那些事务B,C,D对数据做出修改后的生成新版本数据,A都看不见“
即使后续B,C,D都先于A 进行了commit,A还是看不见那些B,C,D 生成新版本数据” (隔离级别 REPEATABLE-READ)
也就是说,事务A能看到哪些版本的数据,不能看到哪些,从它被赋予transactionID的一刻就确定了(它的read-view就确定了),且不会改变,这样才能做到 “可重复读”