【MySQL45讲】day2.一条sql更新语句是如何执行的

一、基本流程

        更新sql和查询sql相似,都要经过mysql的server层和存储引擎层。这里我们先复习一下mysql的整体架构:

1.连接器:首先客户端与mysql建立连接,经过tcp连接后验证用户的身份。

2.cache:先去缓存里查询是否有满足条件的缓存,缓存通常是以key-value键值对的形式存储的。

3.分析器:进行词法分析和语法分析,如果sql的格式出粗,那么会在此时报错。

4.优化器:确定选取的索引和表之间的连接顺序,生成执行计划。

5.执行器:调用对应的存储引擎的接口完成相关操作。

二、日志模块

        在mysql中,并不是我们每update一次,就会向磁盘中写入数据,如果这样,那么每次更新的查找成本和IO成本都很高。

        这就好比古代生活中,饭馆老板有一个记账本,用来记录赊账情况,那么当某一天饭馆很忙的时候,如果有人来还钱,那么如果此时老板去记账本中翻找该人的赊账记录的话,后续就会有很多客人进行排队了,所以此时老板可以先把还账人的名字记录在一个板子上,这样等饭馆打样以后自己私下再去对账。

        对应到mysql中,记账本就是我们的磁盘,板子就是内存。mysql中常说的WAL(Write Aheah Logging)就是根据这种思想来的,关键点就是先写日志,再写磁盘。

redolog和binlog区别
redologbinlog
环境innodbmysql(server)
日志类型物理日志逻辑日志
写方式循环写(大小固定)追加写

三、更新语句执行流程

update T set c=c+1 where ID=2;

 

两阶段提交

        反证法,如果不用两阶段提交,那么无论先写redolog还是binlog,只要中间mysql发生崩溃,那么都会导致数据不一致。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值