1. 1. 一、组成
  2. 2. 二、一条更新语句怎么执行的

一、组成

image-20260326234320642

二、一条更新语句怎么执行的

  1. 首先查询数据是否在内存中,如果在内存中则直接更新,如果不在内存中将数据加载到内存。每个内存页16K,更新后的内存称为脏页,需要在后续刷入磁盘
  2. 更新内存后,将物理修改(某字段改为某个值)写入到redolog中,此时redolog处于prepare状态,事务还没有提交
  3. 将逻辑修改(某字段进行了某些逻辑操作)写入binlog后,redolog才处于commit状态,这时候事务才提交 称之为两阶段提交
    • 如果没有两阶段提交,先提交redolog,数据库宕机。恢复后可以根据redolog找回数据;但是当数据库使用binlog备份恢复时,会缺少数据
    • 如果没有两阶段提交,先提交binlog,数据库宕机。恢复后无法根据redolog找回数据;但是当数据库使用binlog备份恢复时,会多数据

image-20260329224313798