MySQL中InnoDB事务的执行过程

什么是事务

是一种逻辑的执行单元,执行的所有步骤要么全部成功,要么全部失败
比如转账操作,A给B转账100元,分2个步骤:
1.A余额减100
2.B余额加100
这2个操作步骤要么都成功,要么都失败。否则造成数据不一致问题

事务的特性:ACID

  • 原子性(Atomicity)
    操作要么全部成功,要么全部失败,不存在一部分成功一部分失败
  • 一致性(Consistency)
    事务执行前后,数据必须保持一致性状态
    比如转账前后,金额总额是一致的
  • 隔离性(Isolation)
    每个事务相互独立,互不影响。
    MySQL的隔离级别可以控制事务之间的隔离程度,如
    • 读未提交(Read Uncommitted)
    • 读已提交(Read Committed)
    • 可重复读(Repeatable Read)
    • 串行化(Serializable)
  • 持久性(Durability)
    一旦事务提交成功,对数据库的修改应该永久保存,持久化存储,就算系统发生故障或者重启

事务执行过程

image

  • 1.执行器按执行计划执行SQL
  • 2.根据条件从磁盘数据页加载数据到缓冲池的缓存页
  • 3.将旧数据写入 undo log,这一步用于发生异常时回滚数据
  • 4.更新内存数据为新的值,并且标记缓存页为脏页
  • 5.准备提交事务,将事务标记为 “准备提交” 状态
  • 5.写入 redo log(第一阶段提交)
  • 6.写入 binlog,这一步用于主从复制、数据恢复
  • 7.将 binlog 的 commit 信息写入 redo log(第二阶段提交)
  • 8.缓冲池中的脏页数据刷入磁盘

事务在最后的提交,分为两阶段进行提交:
image

posted @ 2024-01-15 18:07  艺言弈行  阅读(88)  评论(0编辑  收藏  举报