innodb 通过undo构造出老版本记录流程

来源:互联网 发布:录像软件 编辑:程序博客网 时间:2024/04/29 03:17
trx_undo_prev_version_build:roll_ptr = row_get_rec_roll_ptr(rec, index, offsets);//rec为新记录rec_trx_id = row_get_rec_trx_id(rec, index, offsets);//获取记录里面的事务idtrx_undo_get_undo_rec(roll_ptr, rec_trx_id, &undo_rec, heap);//根据roll_ptr获取undo recptr = trx_undo_rec_get_pars(undo_rec, &type, &cmpl_info,//解析出type、cmpl_info等    &dummy_extern, &undo_no, &table_id);//解析出老记录的trx_id和roll_ptr和info_bitsptr = trx_undo_update_rec_get_sys_cols(ptr, &trx_id, &roll_ptr,&info_bits);//update的结构:{info_bits = 0, n_fields = 3, fields = 0xa368bb8}// {field_no = 3, orig_len = 0, exp = 0x0, new_val = {data = 0xa368ba2, ext = 0, len = 4, type = // {prtype = 1027, mtype = 6, len = 4, mbminmaxlen = 0}}}ptr = trx_undo_rec_skip_row_ref(ptr, index);//跳过主键列//构建update vector,即更新的老记录列值.将trx_id和roll_ptr放到update最后ptr = trx_undo_update_rec_get_update(ptr, index, type, trx_id,     roll_ptr, info_bits, NULL, heap, &update);buf = static_cast<byte*>(mem_heap_alloc(heap, rec_offs_size(offsets)));//将新记录拷贝到新申请的buf中*old_vers = rec_copy(buf, rec, offsets);rec_offs_make_valid(*old_vers, index, offsets);//替换新记录临时记录的update vectorrow_upd_rec_in_place(*old_vers, index, offsets, update, NULL);


问题:

1、通过undo log和新版本的记录就可以构造出老版本记录了,而且mvcc中也是通过这个方法构造出的老版本记录,并没有直接访问打上delete标签的老版本,那么为什么页内打上delete标签的记录并不直接删除呢?为了回滚?

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小孩腿筋拉伤了怎么办 走多了小腿骨疼怎么办 走多了一个腿疼怎么办 走太多路腿酸痛怎么办 老年人脚肿并痛怎么办 孩子蛙跳肌后大腿痛怎么办 走路久了腿酸怎么办 走路多了膝盖痛怎么办 走路多了小腿痛怎么办 走多了腿疼怎么办 小腿走多了酸痛怎么办 腿肚受凉了酸痛怎么办 晚上腿疼的睡不着觉怎么办 走路走多了腿酸怎么办 跳完蛙跳大腿疼怎么办 走路走多了脚疼怎么办 走太多路脚酸痛怎么办 走路走的腿酸痛怎么办 路走得太多腿疼怎么办 走路走的足弓疼怎么办 走路走多了膝盖怎么办 2岁宝宝走路一只脚内八字怎么办 6岁宝宝o型腿怎么办 一岁宝宝o型腿怎么办 宝宝一岁o型腿怎么办 宝宝一周两个月走路弓着腿怎么办 宝宝腿走路膝盖弯曲怎么办 两岁宝宝不爱走路怎么办 水鸭子脚不能走了怎么办 鸭子坐着脚走不动怎么办 鸭子步走了腿疼怎么办? 跳爵士舞没感觉怎么办 军校学员体能考核不达标怎么办 俯卧撑新兵连做不动怎么办 宝宝胆小不敢上体能课怎么办 28岁老太太抬头纹剩两颗怎么办 大腿前侧抽筋痛怎么办 电脑看片缓冲慢怎么办 跑步跑的腿疼怎么办 第一次去健身房练瑜伽不会怎么办 跑步过后腿筋疼怎么办