一条更新语句是如何工作的?
查询语句的流程,更新语句同样需要⾛⼀遍
- 执⾏语句前先连接数据库
- 数据库表有更新,跟表有关的查询缓存会失效,所以会清空之前的缓存结果
- 分析器进⾏词法和语法解析,优化器进⾏优化,执⾏器负责执⾏,然后更新。
但是更新流程涉及到了两个重要的⽇志模块: redo log(重做⽇志) 和 binlog(归档⽇志)
redo log 和 binlog 有什么不同? redo log 是 InnoDB 引擎特有的; binlog 是 MySQL 的 Server 层实现的,所有引擎都 可以使⽤。
- redo log 是物理⽇志,记录的是“在某个数据⻚上做了什么修改”; binlog 是逻辑⽇ 志,记录的是这个语句的原始逻辑,⽐如“给 ID=2 这⼀⾏的 c 字段加 1
- redo log 是循环写的,空间固定会⽤完; binlog 是可以追加写⼊的。“追加写”是指 binlog ⽂件写到⼀定⼤⼩后会切换到下⼀个,并不会覆盖以前的⽇志。