mysql中更新语句的示例分析

  介绍

这篇文章主要介绍了mysql中更新语句的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。

1,准备

创建一张测试表

CREATE  TABLE “测试”,(   ,“id”int (11), NOT  NULL  AUTO_INCREMENT,   ,' c ' int (11), NOT  NULL  DEFAULT  & # 39; 0 & # 39;, COMMENT  & # 39;数值& # 39;,   ,PRIMARY  KEY  (id)   ),引擎=InnoDB  DEFAULT  CHARSET=utf8 评论=& # 39;测试表& # 39;;

插入三条数据

INSERT  INTO “测试”,(“c”), VALUES  (1), (2), (3);

2,测试

加入我要把第一条数据的c值加1,则

UPDATE “测试”,SET “c”,=,“c”, +, 1, WHERE “id”,=, 1;

按照我们平常的思路,就是找出这条记录,把它的值改好,保存就好了。

但我们追究一下细节,由于涉及到修改数据,所以涉及到日志了。

3操作顺序

3.1查找记录:执行器先找引<强>擎取 id=1这一行.ID是主键,引擎直接用树搜索找到这一行。如果id=1这一行所在的数据页本来就在内存中,就直接返回给执行器;否,则需要先从磁盘读入内存,然后再返回;

3.2 <强>执行器强拿到引擎返回的行数据,把num改为2,得到新的一行数据,再调用引擎接口写入这行新数据;

3.3引擎将这行新数据更新到<强>内存中,同时<强>将这个更新操作记录到重做日志里面强,此时重做日志处于<强> 准备状态;

3.4引擎告知执行器,我执行完成了,你随时可以调我的接口提交事务了;

3.5,执行器生成这个操作的binlog,并把<强> binlog 写入磁盘。

3.6 <强>执行器调用引擎的提交事务接口强,引擎把刚刚写入的重做日志改成<强>提交提交强状态,更新完成。

癿ysql中更新语句的示例分析"

<代码> binlog> 二阶段提交的<强>协调者,它为每个事务分配一个事务id: XID
<强>一阶段:
开启事务,重做日志和日志已撤销经记录了对应的日志,此时事务状态为<代码>准备
<>强二阶段:

<代码> binlog> 写和fsync> ,null

mysql中更新语句的示例分析