👉博主介绍: 博主从事应用安全和大数据领域,有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 通过保存数据的历史版本,允许多个事务同时读取数据