所在的位置: mysql >> mysql市场 >> MySQL事务之undolog

MySQL事务之undolog

上面说的redo日志主要是满足事务持久性的要求。而事务还有一个要求就是原子性,也就是执行过程中如果出错了,或者手动ROLLBACK,需要把已经修改的地方都改回事务开始前的状态。这个时候就要靠undo日志(undolog)了,和redo日志类似,undo日志就是把在事务执行过程中的增、删、改操作都记下来(查询操作不需要记录undo日志)。MySQL会为涉及了增删改操作的事务分配一个id叫做事务id,这个id是全局递增的,类似表中的自增id。事务id会存放在记录中,最开始讲记录的行格式时提到过:除了事务id外,记录里面的roll_pointer也和事务有关,记录了指向对应的undo日志的指针。Insert对应的undo日志上面字段很多不必全都理解,主要有:undotype:该undo日志的类型,这里insert操作对应的当然是insert类型  undono:undo日志的编号,在一个事务的执行过程中,undo日志从0开始编号  tableid:insert操作的表的tableid  主键各列信息:这里只需要记录主键信息就行,因为回滚的时候,只需要定位到主键,然后进行删除操作就行了,会顺带把二级索引的记录也删除掉Delete对应的undo日志一个页面中的记录被删除之后,会先从正常记录的链表转移到垃圾链表中等待回收/重用,同时记录中的delete_mask字段置为1。而在事务提交之前,仅仅会将delete_mask字段置为1,还不会将这条记录移入垃圾链表:事务提交之后,会有专门的后台线程来把记录删掉,这个过程称为purge。删除操作对应的undo日志格式如下:需要


转载请注明:http://www.aierlanlan.com/rzdk/8390.html