UNIV_INTERNulintbtr_cur_update_in_place==================== ulint flags ! in undo logging and locking flags btr_cur_t cursor ! in cursor on the record to update; cursor stays valid and positioned
函数btr_cur_update_in_place用于在B-tree索引中原地更新一个记录,即更新记录的内容但不改变记录的位置。函数的输入参数包括:
- flags:undo日志和锁定标志
- cursor:指向待更新记录的游标
- update:更新向量,即待更新的记录内容
- cmpl_info:辅助信息,用于辅助编译辅助索引
- thr:查询线程
- mtr:Mini-Transaction
函数的返回值是一个错误码,表示函数执行的结果。
函数的执行过程如下:
- 获取待更新记录和索引,检查记录是否为压缩格式。
- 对记录加锁并记录undo日志。
- 检查是否需要更新哈希索引,如果需要则更新。
- 更新记录的系统字段和内容。
- 如果记录之前被标记为删除,但现在不再被删除,则将外部存储字段的所有权转移给新的记录。
- 记录更新操作的undo日志。
- 释放内存池。
其中,步骤2和步骤6是通过调用btr_cur_upd_lock_and_undo和btr_cur_update_in_place_log函数实现的。步骤3和步骤4是通过调用btr_search_update_hash_on_delete、row_upd_rec_sys_fields、row_upd_rec_in_place等函数实现的。步骤5是通过调用btr_cur_unmark_extern_fields函数实现的
原文地址: https://www.cveoy.top/t/topic/eF5V 著作权归作者所有。请勿转载和采集!