上一篇讲到sql提交到存储引擎了,由存储引擎操作内存或磁盘中的数据。
这一篇就开始将接下来的innodb存储引擎是如何处理数据的。
需要执行一条sql: update name=lisi where id =1;
第一步:查询数据
innodb首先需要定位到这条数据所在的位置,如果内存中有则直接定位,没有则需要到磁盘中查询出这一条数据,缓存到内存中。
第二步:写入undo log日志
查询到id=1这一行数据到name为zhangsan,将zhangsan这个旧值写入undo log日志中,以防后面回滚。
第三步:更新内存中的数据
直接更新内存中的数据,而不是硬盘中的数据。
第四步:写入redo buffer
将修改记录写入redo buffer中。
第五步:写入redo log日志中
准备提交事务,将redo buffer中的数据写入到redo log日志。
第六步:写入binlog日志
第七步:写入binlog
这一步将binlog文件位置和commit标识写入redo log文件中,表示事务提交成功。
第八步:写入磁盘文件
磁盘中id=1的这条数据name还是zhangsan的,将磁盘数据改为我们修改后的数据lisi,至此数据更新完成。