关于innodb的一些理解

innodb一致性读的理解:
          如果此时的隔离级别为RR:
              事务开启时不会创建read view,而是在事务中出现第一个select语句的时候创建read view这个数据结构,这个数据结构包含以下的几个字段
              1、up_limit_id:代表创建这个read view时当前全局事务中已经提交的事务的最后一个事务的id
              2、low_limit_id:代表创建这个read view时全局事务中已经创建的事务的最大的id
              3、DATA_ROLL_PTR:记录的是并不在意read view中,这个字段在主键索引的数据节点中,记录的是当前这条数据的undo日志指针,代表了这条数据的之前的版本
              4、tax_ids:是一个指针指向一个数组,表示当前全局事务中的活动的事务的id
          如果此时的隔离级别为RC:
              如果隔离级别为RC的话每次select都会重新生成一个新的read view保证每次读到的都是最新的视图
      innodb的查询逻辑为:
              当事务中出现第一个select时,创建一个read view数据结构
              查询到数据的时候会比较数据中的事务id,如果数据中的事务id小于read view中的up_limit_id,则代表read view创建的时候这条数据已经提交,如果此时
              这条数据的delete_bit标志位为0,则代表可读,1则代表不可读
              如果数据的事务id比read view中的low_limit_id还大,则说明read view创建的时候这个数据的事务还没创建,则一定不可读,此时需要根据这条数据的undo日志指针
              查找数据的之前版本,用这条数据的之前版本再用一样的逻辑判断一遍,决定之前版本数据的可读性
              如果用up_limit_id和low_limit_id不能明确的判断数据是否可读,则说明这条事务正在活动中,需要再活动事务id的数组中查询,找到了则说明不可读。
      另外说明:
              主键索引发生修改的时候,如果修改的主键则将原数据的delete_bit位置为1,再插入一条新的数据,同时新增一个undo日志。如果修改的是非主键则直接修改b+树的叶子节点。
              非主键索引无论修改的是不是索引记录都直接新插入一条数据。
     
     
      innodb锁的语法:
              insert update delete alter语句会自动的给行或者表加锁
              select语句不会加任何锁
              显示加锁的方法
                  select。。。。。lock in share mode 共享锁
                  select。。。。。for update 独占锁
              在加共享锁或独占锁之前会自动加全表的意向锁
          锁的实现方式:
              行锁是通过给索引加锁实现的:
                  如果用到了主键索引则直接给主键索引的b+树的叶子加点加锁
                  如果用到了非主键索引则先给非主键索引的叶子节点加锁再给主键索引的叶子节点加锁
                  如果没有用到主键索引和非主键索引则对全表的所有行加锁(加的是行锁但是效果和表锁一样)
              行锁的分类:
                  行锁:对某一行加锁
                  间隙锁:给一个范围加锁
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值