本文只分析了insert语句执行的主路径,和路径上部分关键函数,很多细节没有深入,留给读者继续分析
create table t1(id int);
insert into t1 values(1)
略过建立连接,从 mysql_parse() 开始分析
进入 mysql_execute_command()
进入 mysql_insert()
进入 write_record
进入ha_write_row、write_row
进入引擎层,这里是innodb引擎,handler对应ha_innobase 插入的表信息保存在handler中
InnoDB表是基于B+树的索引组织表
如果InnoDB表没有主键和唯一键,需要分配隐含的row_id组织聚集索引
row_id分配逻辑在row_ins中,这里不详细展开
插入单个索引项
row_ins_clust_index_entry 和 row_ins_sec_index_entry 函数结构类似,只分析插入聚集索引
row_ins_clust_index_entry_low 和 row_ins_sec_index_entry_low 函数结构类似,只分析插入聚集索引
btr_cur_optimistic_insert 和 btr_cur_pessimistic_insert 涉及B+树的操作,内部细节很多,以后再做分析