ACID(Atomicity 原子性、Consistency 一致性、Isolation 隔离性、Durability 持久性)是一系列属性。

这些属性保证了数据库事物的可靠。在数据库中,对数据的一系列操作在逻辑上可以看成一个整体的操作,这个整体的操作就叫事物。

Atomicity(原子性)

原子性要求每个事物中的所有操作要么全部完成,要么就像全部没有发生一样:如果事物中的部分操作失败了,则整个事物事物失败了,结果就是数据库中的状态保持没变。原子性系统必须保证在各种情况下的原子性,包括主机断电、主机发生了错误、主机奔溃。对外界来说,一个提交了的事物看起来(通过事物对数据库产生的影响)是不可分的,一个失败了的事物,对外界来说就好像什么都没有发生过一样。

Consistency(一致性)

一致性确保了任何事物都会使数据库从一种合法的状态变为另一种合法的状态。通过定义的各种规则,包括约束(constraints)、级联(cascades)、触发器(triggers)以及它们的组合来保证写入数据库的所有数据都必须是合法的。一致性并不能保证事物(程序)的正确性,换句话说事物的一致性并不一定如程序员所期望的那样(这应该是由应用层代码来负责的),它只能保证数据库中的所有数据都不会违反定义好的规则,不管程序有没有发生错误甚至是发生了任何错误都不会违反定义好的规则。

Isolation(隔离性)

隔离性保证了并发执行多个事物对系统的状态的影响和串行化执行多个事物对系统的状态的影响是一样的。隔离性是并发控制的主要目标。 通过并发控制的方法,一个未完成的事物的影响对其他事物是不可见的。

Durability(持久性)

持久性保证了一个事物一旦被提交以后,其状态就保持不变,甚至是发生了主机断电、奔溃、错误等。例如,在关系数据库中,一旦一组 sql 语句被执行后,其结果就被永久保存(甚至事物刚被提交数据库系统就发生了奔溃)。为了主机抵御断电的风险,事物(或者是事物的结果)必须被记录在永久性存储中。

实现

处理一个事物通常需要一系列的操作,任意一个操作失败了都会导致整个事物的失败,因此,造成事物失败的原因有好多个。例如,系统的磁盘已经满了,再没有空间了,或者是事物已经用光了操作系统分配给它的 CPU 时间片。有两种大家都很熟悉的流行技术:预写式日志记录和影子分页。这两种技术中,必须要在将被更新的所有信息上获取锁。获取的锁依赖事物的隔离级别,有可能所有的数据仅仅是被读取,也需要获取锁。在预写式日志记录技术中,在改变数据库之前通过复制原始的(未改变的)数据到日志记录中来保证原子性。有了日志记录就可以使数据库恢复到发生奔溃事件之前的一致性状态。在影子分页技术中,更新被应用到数据库的部分拷贝中,当数据库事物提交时,新的拷贝才被激活了。

好多数据库依赖锁来实现 ACID 能力。锁意味着事物在其需要访问的数据上打个标记,这样一来数据库管理系统就会知道这些数据在该事物完成(事物成功或失败)之前不允许其他事物修改这些被打了标记的数据。锁在数据被处理之前必须获取到,也包括处理那些只会被读取但不会被修改的数据之前也要获取锁。非平常事物通常需要大量锁,导致了不小的性能开销同时也阻塞了其他事物。例如,用户 A 正在执行一个事物,需要读取某一行数据而这时另外一个用户 B 正在修改这一行数据。用户 B 必须等到用户 A 的事物彻底完成。通常可以通过两个阶段锁来保证全隔离性。

数据库的 ACID 属性的更多相关文章

  1. 数据库事务 ACID属性、数据库并发问题和四种隔离级别

    数据库事务 ACID属性.数据库并发问题和四种隔离级别 数据库事务 数据库事务是一组逻辑操作单元,使数据从一种状态变换到另一种状态 一组逻辑操作单元:一个或多个DML操作 事务处理原则 保证所有事务都 ...

  2. 数据库事务的属性-ACID和隔离级别

    1.数据库事务的属性-ACID(四个英文单词的首写字母): 1)原子性(Atomicity) 所谓原子性就是将一组操作作为一个操作单元,是原子操作,即要么全部执行,要么全部不执行. 2)一致性(Con ...

  3. 事务的ACID属性,图解并发事务带来问题以及事务的隔离级别

    事务的概述 事务是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行. 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源.通过将一组相关操作组 ...

  4. Redis的ACID属性

    事务是数据库的一个重要属性,有关事务的4个特性,原子性.一致性.隔离性.持久性,也就是ACID,这些属性既包含了对事务执行结果的要求,也有数据库在事务执行前后的数据状态变化的要求. Redis可以完全 ...

  5. Redis 中的事务分析,Redis 中的事务可以满足ACID属性吗?

    Redis 中的事务 什么是事务 1.原子性(Atomicity) 2.一致性(Consistency) 3.隔离性(Isolation) 4.持久性(Durability) 分析下 Redis 中的 ...

  6. SQL Server 中的 ACID 属性

    SQL Server 中的事务是什么? SQL Server 中的事务是一组被视为一个单元的 SQL 语句,它们按照"做所有事或不做任何事"的原则执行,成功的事务必须通过 ACID ...

  7. MyBatis中---数据库配置的属性名冲突问题

    一.db.properties 属性文件中 最好加特殊的标志前缀  jdbc.username ,如果单纯的username有可能影响到 mapper.xml中的 ${username}; 举例   ...

  8. 尚硅谷面试第一季-08Spring支持的常用数据库事务传播属性和事务隔离级别

    目录结构: 关键代码: BookShopServiceImpl.java package Spring支持的常用数据库事务传播属性和事务隔离级别.tx.service.impl; import Spr ...

  9. 14.2 事务的ACID属性

    14.2 事务的ACID属性正在更新内容.请稍后

随机推荐

  1. 使用webpack搭建vue项目中遇到的问题

    1:data数据文件经试验,需要放在生成的build文件夹中才能生效,但是应该把data文件夹先放在src中,然后如何定义config文件,让其复制过去? new CopyWebpackPlugin( ...

  2. 实习第二天-今年第一场雨-方法的重载(马上想到println()函数和abs(函数))

    在C语言中 调用函数abs()返回一个整数的绝对值, fabs(返回一个单精度浮点型的绝对值)若要返回这些数的绝对值,则必须记住这些函数的名字 java可以用方法的重载:即是方法名必须相同,参数必须不 ...

  3. smarty学习——编写扩展

    在进行了以上的开发环境的配置之后就是,进行进一步的学习,为了开发的方便我们一般会使用oop的编程思想,进行方便的处理 如下: 1.smartyUser 的创建 <?php require_onc ...

  4. 【MVC】View的使用

    /Views/_ViewStart.cshtml 文件会在其他视图文档被加载之前被载入,代码如下: @{ Layout = "~/Views/Shared/_Layout.cshtml&qu ...

  5. 写了一篇关于 FastAdmin 插件路由的分析文章

    写了一篇关于 FastAdmin 插件路由的分析文章 插件路由演示 ThinkPHP 的路由就像是整个应用的调度室,让你的应用 url 更友好,而且让应用更安全,不会让真实的地址暴露出去. 了解过 L ...

  6. JUC锁之 框架

    根据锁的添加到Java中的时间,Java中的锁,可以分为"同步锁"和"JUC包中的锁". 同步锁 即通过synchronized关键字来进行同步,实现对竞争资源 ...

  7. 自定义django model form、admin action

    https://www.cnblogs.com/0zcl/archive/2017/03/22/6580279.html 先看效果图: 登陆admin后的界面: 查看作者: 当然你也可以定制admin ...

  8. dubbo实战

    http://blog.csdn.net/hejingyuan6/article/details/47403299

  9. 添加BAUD_4800

    1.hal_uart.h 添加 #define HAL_UART_BR_4800 0x05 2.mt_uart.h 修改 #define MT_UART_DEFAULT_BAUDRATE HAL_UA ...

  10. Windows OS系统变量

    %userprofile% C:\Users\Administrator\ %windir% C:\Windows\