mvcc可以实现读写并发,通过多版本控制获取到合适版本的对应数据
具体有4列
- 6字节的
事务ID
(DB_TRX_ID
)字段: 用来标识最近一次对本行记录做修改(insert|update)的事务的标识符, 即最后一次修改(insert|update)本行记录的事务id。
至于delete操作,在innodb看来也不过是一次update操作,更新行中的一个特殊位将行表示为deleted, 并非真正删除。 - 7字节的
回滚指针
(DB_ROLL_PTR
)字段: 指写入回滚段(rollback segment)的undo log
record (撤销日志记录记录)。
如果一行记录被更新, 则undo log
record 包含 '重建该行记录被更新之前内容' 所必须的信息。 - 6字节的
DB_ROW_ID
字段: 包含一个随着新行插入而单调递增的行ID, - 删除标识
插入一条消息:
修改那条消息 name改为new_value
删除那条数据
从上面的描述可以看到,在查询时要符合以下两个条件的记录才能被事务查询出来:
1) 删除版本号未指定或者大于当前事务版本号,即查询事务开启后确保读取的行未被删除。(即上述事务id为2的事务查询时,依然能读取到事务id为3所删除的数据行)
2) 创建版本号 小于或者等于 当前事务版本号 ,就是说记录创建是在当前事务中(等于的情况)或者在当前事务启动之前的其他事物进行的insert。
还有回滚指针 行ID这里没有显示出来 请留意