update语句执行流程:mysql> update T set c=c+1 where ID=2;
第一步,执行器先找引擎取ID=2这一行,ID是主键,引擎直接用树搜索找到这一行。如果ID=2,这一行所在的数据页本来就在内存中,直接返回给执行器,否则,需要先从磁盘读入内存,然后再返回。
第二步,执行器拿到引擎给的行数据,执行操作,再调用引擎接口写入这行新数据。
第三步,引擎将这行新数据更新到内存中,同时将这个更新操作记录到redo log里面,redo log处于prepare状态,随后告知,执行器执行完毕,随时可以提交事务。
第四步,执行器生成这个操作的binlog,并把binlog写入磁盘。
第五步,执行器调用引擎的提交事务接口,引擎把刚刚写入的redo log改成提交状态,更新完成。