ITPub博客

首页 > 数据库 > MySQL > 14.2 InnoDB 和 ACID 模型

14.2 InnoDB 和 ACID 模型

翻译 MySQL 作者:kakaxi9521 时间:2020-10-30 11:04:06 1 删除 编辑

14.2 InnoDB 和 ACID 模型

ACID 模型是数据库设计的准则。ACID模型的设计初衷是为了防止在软件或硬件crashes的时候数据损坏。

  • A: atomicity.

  • C:    consistency

  • I:     isolation

  • D:    durability

Atomicity 原子性

      原子性是指一个事务是一个不可分割的工作单元,其中的操作要么都做,要么都不做;如果事务中一个sql语句执行失败,则已执行的语句也必须回滚,数据库退回到事务前的状态。

实现:     

InnoDB 存储引擎提供两种事务日志: redo log(重做日志)和undo log(回滚日志)。其中 redo log 用于保证事务持久性, undo log则是事务原子性和隔离性实现的基础。

     实现原子性的关键,是当事务回滚时能够撤销所有已经成功执行的sql语句。 InnoDB 实现回滚,靠的是undo log:当事务对数据库进行修改时,InnoDB会生成对应的undo log; 如果事务执行失败或调用了rollback,导致事务需要回滚,便可以利用undo log中的信息将数据回滚到修改之前的样子。

    undo log属于逻辑日志,它记录的是sql执行的信息。当发生回滚时,InnoDB会根据undo log的内容做与之相反的工作: 对于每个insert,回滚时会执行delete;对于每个delete,回滚时会执行insert;对于每个update,回滚时会执行一个反向的update,把数据改回去。

Consistency 一致性

一致性是无论在什么情况下,数据的完整性不被破坏。一致性与mysql与下列特性有关:

  • InnoDB doublewrite buffer

  • InnoDB crash recovery

一致性指事务执行结束后,数据库的完整性约束没有被破坏,事务执行的前后都是合法的数据状态。

实现:

可以说一致性是事务追求的终极目标:原子性,持久性,隔离性都是为了保证数据状态的一致性。

Isolation 隔离性

与原子性、持久性侧重于研究事务本身不同,隔离性研究的是不同事务之间的相互影响。隔离性是指,事务内部的操作与其他事务隔离的,并发执行的各个事务之间不能相互干扰。严格的隔离性,对应了事务隔离级别中的serializable(可串行化),但实际应用中处于性能方面的考虑很少会使用可串行化。

Durability 持久性


部分内容参考以下文档:

https://www.cnblogs.com/kismetv/p/10331633.html

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/21374452/viewspace-2730668/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: Mongodb 安装
请登录后发表评论 登录
全部评论

注册时间:2009-04-13

  • 博文量
    136
  • 访问量
    179046