【Mysql 深入探索】InnoDB 实现事务的机制

👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主

⛪️ 个人社区:个人社区
💞 个人主页:个人主页
🙉 专栏地址: ✅ Java 中级
🙉八股文专题:剑指大厂,手撕 Java 八股文

在这里插入图片描述

1. InnoDB 实现事务的机制

InnoDB 是 MySQL 的一个存储引擎,它支持事务处理,并且提供了 ACID(原子性、一致性、隔离性、持久性)特性。InnoDB 通过以下几种机制来实现事务:

  • 日志(Log)

    • 重做日志(Redo Log):记录了所有对数据页的修改操作,用于在系统崩溃后恢复数据。
    • 回滚日志(Undo Log):记录了事务开始前的数据状态,用于回滚未提交的事务或提供多版本并发控制(MVCC)。
  • 锁机制

    • 行级锁:InnoDB 支持行级锁,包括共享锁(S 锁)和排他锁(X 锁),以减少锁定粒度,提高并发性能。
    • 意向锁:用于表级别的锁,表示即将对表中的某些行进行加锁。
  • 多版本并发控制(MVCC)

    • 通过保存数据的历史版本,允许多个事务同时读取数据而不会相互干扰。
  • 双写缓冲区(Doublewrite Buffer)

    • 为了防止部分写入导致的数据损坏,InnoDB 会先将数据写入双写缓冲区,然后再写入数据文件。

2. InnoDB 事务实现原理

InnoDB 事务的实现原理主要依赖于上述提到的日志机制、锁机制和 MVCC。

  • 事务的开启与提交

    • 当一个事务开始时,InnoDB 会为该事务分配一个唯一的事务 ID。
    • 事务执行过程中,所有对数据的修改都会记录在重做日志中。
    • 当事务提交时,InnoDB 会将重做日志刷新到磁盘,并释放相关的锁资源。
  • 事务的回滚

    • 如果事务需要回滚,InnoDB 会使用回滚日志将数据恢复到事务开始前的状态。
    • 回滚日志还用于 MVCC,确保事务读取的是某个时间点的一致性视图。
  • 锁机制

    • InnoDB 使用行级锁来管理并发访问。当多个事务试图修改同一行数据时,只有第一个事务可以获得排他锁,其他事务必须等待。
    • 意向锁用于表级别,表示即将对表中的某些行进行加锁,从而避免死锁。
  • 多版本并发控制(MVCC)

    • MVCC 通过保存数据的历史版本,允许多个事务同时读取数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

激流丶

感觉小弟写的不错,给点鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值