我是靠谱客的博主 务实月饼,最近开发中收集的这篇文章主要介绍面试笔记 | 数据库事务的四个特性 ACID,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

数据库事务的四个特性: 原子性Atomicity、 一致性Consistency、 隔离性Isolation、 持久性Duration

  • 事务(Transaction)是由一系列对系统中数据进行访问与更新的操作所组成的一个程序执行逻辑单元
  • 事务是指作为单个逻辑工作单元执行的一系列操作,这些操作要么全做,要么全不做,是一个不可分割的工作单元。
  • 事务被视为不可分隔的最小单位。
01 原子性Atomicity
  • 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要么完全应用到数据库,如果操作失败则不能对数据库有任何影响。

比如,A与B之间进行转账,A - 1000, B + 1000这两个操作,要么都成功,要么都不成功,不能A减了B却没加。

02 一致性Consistency
  • 一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
  • 在一致性状态下,所有事务对一个数据的读取结果都是相同的。

比如,A与B之间进行多次转账,但是A和B总共的钱是不变的。

对数据一致性的破坏主要来自两个方面:
  1. 事务的并发执行
  2. 事务故障或系统故障
  • 数据库系统是通过并发控制技术和日志恢复技术来避免这种情况发生的。
03 隔离性Isolation
  • 隔离性当多个用户并发访问数据库时,多个并发事务之间要相互隔离,一个事务不应该影响其他事务运行效果。
  • 同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。
  • 一个事务所做的修改在最终提交前,对其他事务是不可见的。

比如,A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。

04 持久性Durability
  • 持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。

在这里插入图片描述
在这里插入图片描述

怎么保证持久性
  • 日志(Log) 是硬盘上的一个数据文件并且只会顺序追加写入,可以用来高效的持久化信息。Commit Logging 就是在事务内所有操作都结束开始执行提交(Commit)时,将事务所有修改的数据(包括插入、更新、删除)写入日志,如果所有的日志写入都成功,那么事务最终就是成功的,即使出现系统故障,数据库系统重启后依然可以从日志中恢复出事务所有修改的数据,保证了事务的持久性。
    在这里插入图片描述
那么事务的原子性是如何保证的呢?
  • 如果日志只写到一半没有完全写完时出现系统故障,首先对于内存数据库来说,事务对应的修改都在内存中,系统故障后这些修改也都随着内存内容的丢失一起消失了。其次,当数据库系统重新恢复时,会发现日志中事务只写了一部分并没有完成标记,那么这个事务就记为回滚状态,并不会重放到内存中,那么这个事务就好像完全没有发生过一样。
ARIES 三原则

ARIES 三原则,是指 Write Ahead Logging(WAL)。

  • 先写日志后写磁盘,日志成功写入后事务就不会丢失,后续由 checkpoint 机制来保证磁盘物理文件与 Redo 日志达到一致性;
  • 利用 Redo 记录变更后的数据,即 Redo 记录事务数据变更后的值;
  • 利用 Undo 记录变更前的数据,即 Undo 记录事务数据变更前的值,用于回滚和其他事务多版本读。
    在这里插入图片描述

最后

以上就是务实月饼为你收集整理的面试笔记 | 数据库事务的四个特性 ACID的全部内容,希望文章能够帮你解决面试笔记 | 数据库事务的四个特性 ACID所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部