一条更新SQL语句从客户端发起到服务端执行流程大致如下:
1. 建立连接:客户端发送请求到服务端
2. 查询缓存:对SQL更新的表,让其所对应的的查询缓存失效
3. 解析器:对SQL语句进行语法分析,校验关键字是否合规
4. SQL优化:选择索引,生成执行计划
5. 执行引擎:执行引擎去存储引擎查询需要更新的数据
6. 存储引擎:判断当前缓冲池中是否存在需要更新的数据,存在就直接返回,否则去磁盘加载数据
7. 调用:执行引擎调用存储引擎API去更新数据
8. 存储引擎执行:更新数据,写入undo_log、redo_log信息
9. 写binlog,执行引擎写binlog,提交事务,流程结束。
redo_log
重做日志,InnoDB存储引擎特有的,保证事务的原子性和持久性,通过redo_log可以恢复更新的数据
udno_log
保证事务的一致性,SQL语句的逆向操作,在事务需要进行回滚时调用
binlog
二进制日志,记录了改变数据库的SQL语句。不同于redo_log是物理日志,binlog和undo_log都属于逻辑日志逻辑日志,