MySQL-InnoDB-MVCC多版本并发控制
一、MySQL可重复读级别下,因为MVCC引起的BUG,下图1为相应的Java代码,其中事务1的生命周期最长,循环开启的事务2、3、4。。。与事务1存在并发问题 图1 解决方案:将方法userRemoteService.addUser和UserBaseContext.getUserBaseByUserId放在两个方法中,避免事务的并发问题 READ COMMITTED REPEATABLE READ READ UNCOMMITTED SERIALIZABLE 三、数据行隐藏字段 6字节的DATA_TRX_ID 标记了最新更新这条行记录的transaction id,每处理一个事务,其值自动+1 7字节的DATA_ROLL_PTR 指向当前记录项的rollback segment的undo log记录,找之前版本的数据就是通过这个指针 6字节的DB_ROW_ID,当由innodb自动产生聚集索引时,聚集索引包括这个DB_ROW_ID的值,否则聚集索引中不包括这个值.,这个用于索引当中 DELETE BIT位用于标识该记录是否被删除,这里的不是真正的删除数据,而是标志出来的删除。真正意义的删除是在commit的时候 对于有有三个字段id、name、balance的表,其中id为主键,实际的拥有的列如下 四