ReadView判断可见性的原理如下,在InnoDB中,创建一个新事务之后,当新事务读取数据时,数据库为该事务生成一个ReadView读视图,InnoDB会将当前系统中的活跃事务列表创建一个副本保存到ReadView。遴选真题当用户在这个事务中要读取某行记录的时候,InnoDB会将该行当前的版本号与该ReadView进行比较。具体的算法如下:
那么表明该行记录所在事务在本次新事务创建的时候处于活动状态,从min_trx_id到max_trx_id进行遍历,如果cur_trx_id等于他们之中的某个事务id的话,那么不可见。跳到步骤5;遴选真题
从该行记录的DB_ROLL_PTR指针所指向的回滚段中取出最新的UndoLog的版本号,将它赋值该cur_trx_id,然后跳到步骤2;http://www.gongxuanwang.com/
同一个事务里面连续执行两次同样的SQL语句,可能导致不同结果的问题,第二次SQL语句可能会返回之前不存在的行。举例说明:T1时刻事务A和事务B同时开启,分别进行了快照读,然后事务A向数据库中插入一条新的记录,遴选真题
如果事务B可以读到这条记录,就出现了"幻读",因为B第一次快照读没有读到这条数据。http://www.gongxuanwang.com/
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。