- 更新语句经过解析与优化,生成执行计划,交由执行器调用存储引擎接口。
- 执行器会多次调用存储引擎接口,并不是一次完成
- 查询旧值,如果这个值不在内存缓冲区则需要查找旧值,从磁盘数据页加载到内存缓冲区
- 先将旧值写入undo log日志文件中,用于回滚数据
- 更新内存中的数据
- 向更新操作写入内存中redo log buffer中
- redo log buffer里的日志每隔一秒会自动刷新到磁盘
- 将redo log buffer中跟本事务相关的redo log日志刷新到磁盘,并向磁盘redo log文件中写入一个prepare redo log
- 准备提交事务,将binlog日志写入磁盘binlog文件中
- 把本次更新对应的binlog文件名称和这些更新的binlog日志在磁盘文件的位置都写入到redo log日志文件中,同时在redo log 文件中写入一个commit标志
- 事务处理完成
- mysql 后台线程会负责将数据刷入到磁盘。