• InnoDB实现MVCC(多版本并发控制)它存储了每一行的三个额外的隐藏字段


    1.DB_TRX_ID:一个6byte的标识,每处理一个事务,其值自动+1
    #下面提到的“创建时间”和“删除时间”记录的就是这个DB_TRX_ID的值
    #如insert、update、delete操作时,删除操作用1个bit表示。 
    #DB_TRX_ID是最重要的一个,可以通过语句“show engine innodb status”来查找 
    
    
    2.DB_ROLL_PTR: 大小是7byte,指向写到rollback segment(回滚段)的一条undo log记录
     (update操作的话,记录update前的ROW值)
    
    3.DB_ROW_ID: 大小是6byte,该值随新行插入单调增加。
      #当由innodb自动产生聚集索引时聚集索引(即没有主键时,因为MYSQL默认聚簇表,会自动生成一个ROWID)
      #包括这个DB_ROW_ID的值,
      #不然的话聚集索引中不包括这个值,这个用于索引当中。

    DB_TRX_ID记录了行的创建的时间删除的时间在每个事件发生的时候,每行存储版本号,而不是存储事件实际发生的时间。

    每次事物的开始这个版本号都会增加。自记录时间开始,每个事物都会保存记录的系统版本号。
    依照事物的版本来检查每行的版本号。

    在insert操作时 “创建时间”=DB_TRX_ID,这时,“删除时间”是未定义的;在update时,复制新增行的“创建时间”=DB_TRX_ID,删除时间未定义,旧数据行“创建时间”不变,
    删除时间=该事务DB_TRX_ID;delete操作,相应数据行的“创建时间”不变,删除时间=该事务的DB_ROW_ID;select操作对两者都不修改,只读相应的数据

  • 相关阅读:
    过滤器(Filter)
    DBUtils结果集处理器介绍
    Tomcat配置连接c3p0连接池
    JdbcUtils
    数据库连接池
    JDBC处理事务
    JDBC入门(5)--- 时间类型、大数据
    JDBC入门(4)--- 批处理
    JDBC入门(3)--- PrepareStatement
    JDBC入门(2)--- ResultSet之滚动结果集
  • 原文地址:https://www.cnblogs.com/zzq-include/p/13532019.html
Copyright © 2020-2023  润新知