一、前言
一条查询语句的执行过程一般是经过连接器、分析器、优化器、执行器等功能模块,最后到达存储引擎
dba经常说:MySQL可以恢复半个月内任意一秒的状态,惊叹的同时,是不是好奇这是怎么做到?接下来我们从一个表的一条更新语句看看这究竟如何做到的
下面是这个表的创建语句,这个表有一个主键ID和一个整型字段c:
mysql> create table T(ID int primary key, c int);
如果要将ID=2这一行的值加1,SQL语句就会这么写:
mysql> update T set c=c+1 where ID=2;
二、执行流程
前面有SQL语句基本的执行链路,这里再次利用这张图回顾一下
可以确定的说,查询语句的那一套流程,更新语句也是同样会走一遍
- 执行语句前要先连接数据库,这是连接器的工作
- 把表T上所有缓存结果都清空
在一个表上有更新的时候,跟这个表有关的查询缓存会失效,这也是一般不建议使用查询缓存的原因 - 分析器通过词法和语法解析知道这是一条更新语句
- 优化器决定要使用ID这个索引
- 执行器负责具体执行&#x