1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-06-16 18:10:13 +08:00

Update 一条sql语句在mysql中如何执行的.md

This commit is contained in:
SnailClimb 2019-03-29 18:50:16 +08:00 committed by GitHub
parent eaa3a14147
commit 03c6c23718
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -18,24 +18,6 @@
<!-- /TOC -->
<!-- TOC -->
- [一 MySQL 基础架构分析](#一-mysql-基础架构分析)
- [1.1 MySQL 基本架构概览](#11-mysql-基本架构概览)
- [1.2 Server 层基本组件介绍](#12-server-层基本组件介绍)
- [1) 连接器](#1-连接器)
- [2) 查询缓存(MySQL 8.0 版本后移除)](#2-查询缓存mysql-80-版本后移除)
- [3) 分析器](#3-分析器)
- [4) 优化器](#4-优化器)
- [5) 执行器](#5-执行器)
- [二 语句分析](#二-语句分析)
- [2.1 查询语句](#21-查询语句)
- [2.2 更新语句](#22-更新语句)
- [三 总结](#三-总结)
- [四 参考](#四-参考)
<!-- /TOC -->
本篇文章会分析下一个 sql 语句在 MySQL 中的执行流程,包括 sql 的查询在 MySQL 内部会怎么流转sql 语句的更新是怎么完成的。
在分析之前我会先带着你看看 MySQL 的基础架构,知道了 MySQL 由那些组件组成已经这些组件的作用是什么,可以帮助我们理解和解决这些问题。
@ -137,7 +119,7 @@ update tb_student A set A.age='19' where A.name=' 张三 ';
* 执行器收到通知后记录 binlog然后调用引擎接口提交 redo log 为提交状态。
* 更新完成。
这里肯定有同学会问,为什么要用两个日志模块,用一个日志模块不行吗
**这里肯定有同学会问,为什么要用两个日志模块,用一个日志模块不行吗?**
这是因为最开始 MySQL 并没与 InnoDB 引擎( InnoDB 引擎是其他公司以插件形式插入 MySQL 的) MySQL 自带的引擎是 MyISAM但是我们知道 redo log 是 InnoDB 引擎特有的,其他存储引擎都没有,这就导致会没有 crash-safe 的能力(crash-safe 的能力即使数据库发生异常重启,之前提交的记录都不会丢失)binlog 日志只能用来归档。