上篇文章 学习了 mysql的基础架构,理清了一条查询sql在mysql中的执行过程,其实update语句的执行过程也是大致相同的。
以下面的一条sql为例 (ID为主键)
update T set b=b+1 where ID = 2
至此一条update语句就执行完成了。
redo日志:Innodb存储引擎特有的机制,可以用来应对异常恢复,Crash-safe,redo可以保证mysql异常重启时,将未提交的事务回滚,已提交的事务安全落库。
二阶段提交:redo(perpare)--->binlog-->redo(commit) 保证了mysql在异常重启的时候,数据的一致性,在任意环节出错,都可以保证redo日志和binlog的一致性。
WAL:第8个步骤,innodb没有直接将数据落盘,而是存在内存中,并记录日志,这里用到的技术就是WAL(Write-Ahead Logging)。数据在持久化硬盘前,如果mysql异常重启,innodb可以根据redo日志将未持久化的数据恢复。redo日志是有大小限制的,循环写,当redo快要写满时,将redo日志头部的记录清理,擦除记录前要把内存记录更新到数据文件。
binLog: binlog 记录的是逻辑日志,是mysql的归档日志,支持所有引擎使用。与redo不同的是,binlog是不限制大小,文件追加写。
这里将老师的图贴上(对应的5--11的步骤)
<mysql实战45讲 课后笔记(二)> 一条update语句是如何执行的
原文:https://www.cnblogs.com/jasonbourne3/p/12530069.html