(1)版本链:
简单来说,每条数据其实都有两个隐藏字段,一个是trx_id,一个是 roll_pointer,trx_id是最近一次更新这条数据的事务id,roll_pointer指向了更新这个事务之前生成的undo log。
举例:假设事务A(id=50),插入一条数据的值是值A,事务的id是50,所以这条数据的trx_id 是50,roll_pointer指向一个空的undo log,因为之前这条数据是没有的,接着事务B修改这条数据,把值修改成了B,事务B的id是58,那么此时更新之前会生成一个undo log记录之前的值,然后roll_pointer指向这个实际的undo log回滚日志。
事务B修改了值此时为B,表里的那行数据的值就是B,那行数据的trx_id就是事务B的id,也就是58,roll_pointer指向了undo log,这个undo log记录更新之前的那条数据的值。
(2)多个事务串行执行的时候,每个人修改了一行数据,都会更新隐藏字段trx_id和roll_pointer,同时之前多个数据快照对应的undo log会通过roll_pointer指针串联起来,形成一个重要 的版本链。
(3)总结:
每个事务里的undo log日志的编号都是从0开始的,然后依次递增。