函数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函数实现的

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

原文地址: https://www.cveoy.top/t/topic/eF5V 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录