mysql:一条SQL查询语句是如何执行的?( 三 )


如果 redo log 只是预提交但不是 commit 状态 。这个时候就会去判断 binlog 是否完整 。如果完整就提交 redo log, 不完整就回滚事务 。
这样就解决了数据一致性的问题 。
三 总结
MySQL 主要分为 Server 曾和引擎层 。Server 层主要包括连接器、查询缓存、分析器、优化器、执行器 。同时还有一个日志模块(binlog) 。这个日志模块所有执行引擎都可以共用,redolog 只有 InnoDB 有 。
引擎层是插件式的 。目前主要包括 。MyISAM,InnoDB,Memory 等 。
查询语句的执行流程如下:权限校验(如果命中缓存)---》查询缓存---》分析器---》优化器---》权限校验---》执行器---》引擎
更新语句执行流程如下:分析器----》权限校验----》执行器---》引擎---redo log(prepare 状态---》binlog---》redo log(commit状态)
其他观点:
【mysql:一条SQL查询语句是如何执行的?】SET @update_stmt=''/*在单引号中间填入要执行的sql语句*/PREPARE stmt FROM @update_stmt;EXECUTE stmt;DEALLOCATE PREPARE stmt;

推荐阅读