3. 隔离性
保证事务执行尽可能不受其他事务影响;<br>InnoDB默认的隔离级别是RR,RR的实现主要基于<br><font color="#31a8e0">锁机制</font><font color="#c41230">(保证只能同时存在一个写操作)</font>、<br><font color="#31a8e0">数据的隐藏列</font><font color="#c41230">(记录当前行数据的版本号、删除时间、指向undo log)</font>、<br><font color="#31a8e0">undo log</font><font color="#c41230">、</font><br><font color="#31a8e0">类next-key lock机制</font><font color="#c41230">(范围查询时,会对查出来的记录进行版本号标记)</font><br>
脏读
事务A修改了记录a且未提交, <br>事务B读取记录a时发现版本不对, <font color="#c41230">从undo_log</font>中读取未修改前的值返回<br>
不可重复读(数据变化)
事务A第一次读了记录a, <br>事务A执行期间, 事务B修改了记录a并完成提交, <br>事务A第二次读记录a时, 发现数据版本与第一次读不一致, 从<font color="#c41230">undo_log</font>中读取旧版本数据<br>
幻读(数据增多)
事务A第一次范围查询, 查询出3个记录,并记录当前记录的版本号<br>事务A执行期间, 事务B新增了符合该范围查询的记录,并完成提交,<br>事务A,第二次查询时发现存在版本号与第一次的版本号不一致<font color="#c41230">(next-key lock)</font>, 则利用undo_log回滚数据, 保证与第一次查询相同