怎么在网站后台挂马,想招聘员工去哪个网站,大数据营销的概念,网络营销分类Mysql 里面的事务#xff0c;满足 ACID 特性#xff0c;所以Mysql 的事务实现原理#xff0c;就是InnoDB 是如何保证 ACID 特性的。 ACID A 表示 Atomic 原子性#xff0c;也就是需要保证多个 DML 操作是原子的#xff0c;要么都成功#xff0c;要么都失败。那么#xf… Mysql 里面的事务满足 ACID 特性所以Mysql 的事务实现原理就是InnoDB 是如何保证 ACID 特性的。 ACID A 表示 Atomic 原子性也就是需要保证多个 DML 操作是原子的要么都成功要么都失败。那么失败就意味着要对原本执行成功的数据进行回滚所以 InnoDB 设计了一个UNDO_LOG 表在事务执行的过程中把修改之前的数据快照保存到UNDO_LOG里面一旦出现错误就直接从UNDO_LOG里面读取数据执行反向操作就行了。 C 表示一致性表示数据的完整性约束没有被破坏这个更多是依赖于业务层面的保证数据库本身也提供了一些比如主键的唯一约束字段长度和类型的保证等等。 I 表示事物的隔离性也就是多个并行事务对同一个数据进行操作的时候如何避免多个事务的干扰导致数据混乱的问题.而 InnoDB 实现了 SQL92 的标准提供了四种隔离级别的实现。InnoDB 默认的隔离级别是 RR可重复读然后使用了 MVCC 机制解决了脏读和不可重复读的问题然后使用了行锁/表锁的方式解决了幻读的问题。 D表示持久性也就是只要事务提交成功那对于这个数据的结果的影响一定是永久性的。不能因为宕机或者其他原因导致数据变更失效。 理论上来说事务提交之后直接把数据持久化到磁盘就行了但是因为随机磁盘 IO 的效率确实很低所以 InnoDB 设计了Buffer Pool 缓冲区来优化也就是数据发生变更的时候先更新内存缓冲区然后在合适的时机再持久化到磁盘。那在持久化这个过程中如果数据库宕机就会导致数据丢失也就无法满足持久性了。所以 InnoDB 引入了 Redo_LOG 文件这个文件存储了数据被修改之后的值当我们通过事务对数据进行变更操作的时候除了修改内存缓冲区里面的数据以外还会把本次修改的值追加到 REDO_LOG 里面。当提交事务的时候直接把 REDO_LOG 日志刷到磁盘上持久化一旦数据库出现宕机在 Mysql 重启在以后可以直接用 REDO_LOG 里面保存的重写日志读取出来再执行一遍从而保证持久性。 因此在我看来事务的实现原理的核心本质就是如何满足 ACID 的在 InnDB 里面用到了 MVCC、行锁表锁、UNDO_LOG、REDO_LOG 等机制来保证。