做求职网站市场,西安至诚网站建设,莱芜举报网站,济南市住建厅官方网站记录源码学习笔记#xff0c;如有错误#xff0c;还请帮忙指正。
Lock_rec_move 函数使用场景之用于update
Update 匹配条件时会用lock_rec_lock先加锁。然后再进行ha_update_row 操作。
在修改时#xff0c;当修改的字段前后长度不一致时#xff0c;会导致不能原地修改…记录源码学习笔记如有错误还请帮忙指正。
Lock_rec_move 函数使用场景之用于update
Update 匹配条件时会用lock_rec_lock先加锁。然后再进行ha_update_row 操作。
在修改时当修改的字段前后长度不一致时会导致不能原地修改因此会产生先delete、再insert rec的行为在先删后插的过程中为了保持对这个lock的持有会将lock先move到infimum记录上然后等插入完成后再将这个lock转移到新的rec对象上来转移过程只有 heap no对应 bit的变化没有type mode变化。
如果update操作被rollback也会有同样的流程。
另外如果修改的字段前后长度一致就可以做原地修改就不存在这个lock_rec_move的操作了。 lock_rec_move查看调用关系有以下几个场景:
1lock_update_split_right
page向右分裂时更新lock table
2lock_update_merge_left
3lock_update_copy_and_discard
4lock_update_root_raise
5lock_rec_store_on_page_infimum 将 lock转移到infimum上。
6lock_rec_restore_from_page_infimum 将infimum上的lock恢复到原记录上。
btr_cur_optimistic_update、btr_cur_pessimistic_update 都有使用到56函数。