精华内容
下载资源
问答
  • 数据库ACID特性

    2017-03-13 10:23:38
    ACID,是指在数据库管理系统(DBMS)中事务所具有的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。 在数据库系统中,一个事务是指由一系列...
    
    

    ACID,是指在数据库管理系统(DBMS)中事务所具有的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。

     

    在数据库系统中,一个事务是指由一系列数据库操作组成的一个完整的逻辑过程。例如银行转帐,从原账户扣除金额,以及向目标账户添加金额,这两个数据库操作的总和构成一个完整的逻辑过程,不可拆分。这个过程被称为一个事务,具有ACID特性。

    原子性

    整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。

     

    一致性

    在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。

     

    隔离性

    两个事务的执行是互不干扰的,一个事务不可能看到其他事务运行时,中间某一时刻的数据。

     

    持久性

    在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。      

               由于一项操作通常会包含许多子操作,而这些子操作可能会因为硬件的损坏或其他因素产生问题,要正确实现ACID并不容易。ACID建议数据库将所有需要更新以及修改的资料一次操作完毕,但实际上并不可行。

     

     

     

    展开全文
  • 关系型数据库ACID特性

    2017-05-07 22:09:50
    http://blog.csdn.net/shuaihj/article/details/14163713
    http://blog.csdn.net/shuaihj/article/details/14163713
    展开全文
  • 数据库ACID四大特性到底为了啥,一文带你看通透

    千次阅读 多人点赞 2021-05-06 13:44:38
    说起数据库四大特性,同学们张口就来,ACID!那为什么要ACID?每种特性的原理又是什么?如何实现的?废话少说,哈哥今天带你搞清楚,快上车!

    小伙伴想精准查找自己想看的MySQL文章?喏 → MySQL江湖路 | 专栏目录

      说起数据库四大特性,同学们张口就来,ACID!那为什么要ACID?每种特性的原理又是什么?如何实现的?废话少说,哈哥今天带你搞清楚,快上车!
      ACID,是用来声明数据库事务的四大特性,即原子性 (Atomicity)、 一致性(Consistency)、隔离性(Isolation) 和 持久性(Durability)

    在这里插入图片描述

    谈谈个人理解

      简单说,事务就是一组原子性的SQL执行单元。如果数据库引擎能够成功地对数据库应 用该组査询的全部语句,那么就执行该组SQL。如果其中有任何一条语句因为崩溃或其 他原因无法执行,那么所有的语句都不会执行。要么全部执行成功(commit),要么全部执行失败(rollback)

      这里引用银行转账的例子,假设银行的数据库有两张表:信用卡(credit)表和储蓄(savings)表。用户陈哈哈要把信用卡里最后100块钱额度转到他 的储蓄账户用来吃饭,那么需要至少三个步骤:

    1. 检査信用卡余额是否髙于100块钱。
    2. 从信用卡账户余额中减去100块钱。
    3. 在储蓄账户余额中增加100块钱。

      上述三个步骤必须在同一个事务中执行,任何一个SQL失败,则必须回滚所有的SQL。这里用START TRANSACTION语句开启事务,要么使用COMMIT提交事务将修改的数据持久保留,要么使用ROLLBACK销所有的修改。事务SQL的样本如下:

    START TRANSACTION;
    -- 检查信用卡账户额度
    SELECT balance FROM credit WHERE customer_id = 'chenhh';
    -- 信用卡表扣钱
    UPDATE credit SET balance = balance - 100.00 WHERE customer_id = 'chenhh';
    -- 储蓄表加钱
    UPDATE savings SET balance = balance + 100.00 WHERE customer_id = 'chenhh';
    COMMIT;
    

      试想一下,如果执行到第四条语句时服务器崩溃了,会发生什么?废话,我被坑了100块钱,中午只能饿肚子!再假如,在执行到第三条语句和第四 条语句之间时,同一时间,另外一个进程,来自商场结账的女朋友,也要信用卡账户的100块,那么结果可能就是银行在不知道这个逻辑的情况下白白给了陈哈哈女朋友100块钱?

    在这里插入图片描述

      别做梦了,主流关系型数据库(如MySQL、Oracle等)是通过了严格的ACID测试,不会随便出这种BUG的。那么我们今天就一起来搞懂ACID的核心原理。

    一、ACID特性

    • 原子性(Atomicity)

      单个事务,为一个不可分割的最小工作单元,整个事务中的所有操作要么全部commit成功,要么全部失败rollback,对于一个事务来说,不可能只执行其中的一部分SQL操作,这就是事务的原子性。

    • 一致性(Consistency)

      数据库总是从一个一致性的状态转换到另外一个一致性的状态。在前面的例子中, 一致性确保了,即使在执行第三、四条语句之间时系统崩潰,信用卡账户也不会损 失100块,因为事务最终没有提交,所以事务中所做的修改也不会保存到数据库中,保证数据一致性。

    • 隔离性(Isolation)

      通常来说,一个事务所做的修改在最终提交以前,对其他事务是不可见的。在前面 的例子中,当执行完第三条语句、第四条语句还未开始时,此时有另外一个账户查询余额SQL开始运行,则其看到的信用卡账户的余额并没有被减去100元。后面我们讨论隔离级别(Isolation level)的时候,会发现为什么我们要说事务通常来说是不可见的

    • 持久性(Durability)

      一旦事务提交,则其所做的修改就会永久保存到数据库中。此时即使系统崩溃,修改的数据也不会丢失。

      事务的ACID特性可以确保银行不会弄丢你的钱。而在应用逻辑中,要实现这一点非常难, 甚至可以说是不可能完成的任务。一个兼容ACID的数据库系统,需要做很多复杂但可能用户并没有觉察到的工作,才能确保ACID的实现。

    二、ACID具体实现

      对MySQL来说,逻辑备份日志(binlog)、重做日志(redolog)、回滚日志(undolog)、锁技术 + MVCC就是MySQL实现事务的基础

    • 原子性:通过undolog来实现。
    • 持久性:通过binlog、redolog来实现。
    • 隔离性:通过(读写锁+MVCC)来实现。
    • 一致性:MySQL通过原子性,持久性,隔离性最终实现(或者说定义)数据一致性。

    学习MySQL日志可参考《听我讲完redo log、binlog原理,面试官老脸一红》
    学习MySQL锁机制可参考 《面试让HR都能听懂的MySQL锁机制,欢声笑语中搞懂MySQL锁》

    1、原子性原理

    事务通常是以BEGIN TRANSACTION 开始,以 COMMIT 或 ROLLBACK 结束。

    • COMMIT 表示提交,即提交事务的所有操作并持久化到数据库中。
    • ROLLBACK表示回滚,即在事务中运行的过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库所有已完成的操作全部撤销,回滚到事务开始时的状态,这里的操作指对数据库的更新操作,已执行的查询操作不用管。这时候也就需要用到 undolog 来进行回滚。

    undolog:

    1. 每条数据变更(INSERT/UPDATE/DELETE/REPLACE)等操作都会生成一条undolog记录,在SQL执行前先于数据持久化到磁盘。
    2. 当事务需要回滚时,MySQL会根据回滚日志对事务中已执行的SQL做逆向操作,比如 DELETE 掉一行数据的逆向操作就是再把这行数据 INSERT回去,其他操作同理。

    2、持久性原理

      先了解一下MySQL的数据存储机制,MySQL的表数据是存放在磁盘上的,因此想要存取的时候都要经历磁盘 IO,然而即使是使用 SSD 磁盘 IO 也是非常消耗性能的。为此,为了提升性能 InnoDB 提供了缓冲池(Buffer Pool),Buffer Pool 中包含了磁盘数据页的映射,可以当做缓存来使用:

    • 读数据:会首先从缓冲池中读取,如果缓冲池中没有,则从磁盘读取在放入缓冲池;
    • 写数据:会首先写入缓冲池,缓冲池中的数据会定期同步到磁盘中;

      我们知道,MySQL表数据是持久化到磁盘中的,但如果所有操作都去操作磁盘,等并发上来了,那处理速度谁都吃不消,因此引入了缓冲池(Buffer Pool)的概念,Buffer Pool 中包含了磁盘中部分数据页的映射,可以当做缓存来用;这样当修改表数据时,我们把操作记录先写到Buffer Pool中,并标记事务已完成,等MySQL空闲时,再把更新操作持久化到磁盘里(你可能会问,到底什么时候执行持久化呢?1、MySQL线程低于高水位;2、当有其他查询、更新语句操作该数据页时),从而大大缓解了MySQL并发压力。

      但是它也带来了新的问题,当MySQL系统宕机,断电时Buffer Pool数据不就丢了?

      因为我们的数据已经提交了,但此时是在缓冲池里头,还没来得及在磁盘持久化,所以我们急需一种机制需要存一下已提交事务的数据,为恢复数据使用。

      于是 redo log + binlog的经典组合就登场了,这里不在扩展赘述。可参考《听我讲完redo log、binlog原理,面试官老脸一红》

    3、隔离性原理

      隔离性是事务ACID特性里最复杂的一个。在SQL标准里定义了四种隔离级别,每一种级别都规定一个事务中的修改,哪些是事务之间可见的,哪些是不可见的。

      级别越低的隔离级别可以执行越高的并发,但同时实现复杂度以及开销也越大。

    搞懂MySQL事务隔离级别请参考《上个厕所的功夫,搞懂MySQL事务隔离级别》

    Mysql 隔离级别有以下四种(级别由低到高):

    隔离级别效果
    读未提交(RU)一个事务还没提交时,它做的变更就能被别的事务看到。(别的事务指同一时间进行的增删改查操作)
    读提交(RC)一个事务提交(commit)之后,它做的变更才会被其他事务看到。
    可重复读(RR)一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。
    当然在可重复读隔离级别下,未提交变更对其他事务也是不可见的。
    串行(xíng)化(S)正如物理书上写的,串行是单线路,顾名思义在MySQL中同一时刻只允许单个事务执行,“写”会加“写锁”,“读”会加“读锁”。
    当出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行。

      搞懂了隔离级别以及实现原理其实就可以理解ACID里的隔离性了。前面说过原子性,隔离性,持久性的目的都是为了要做到一致性,但隔离型跟其他两个有所区别,原子性和持久性是为了要实现数据的正确、可用,比如要做到宕机后的恢复、事务的回滚等,保证数据是正确可用的!

      那么隔离性是要做到什么呢?

      隔离性要管理的是:多个并发读写请求(事务)过来时的执行顺序。像交警在马路口儿指挥交通一样,当并发处理多个DML更新操作时,如何让事务操作他该看到的数据,出现多个事务处理同一条数据时,让事务该排队的排队,别插队捣乱,保证数据和事务的相对隔离,这就是隔离性要干的事儿。
    在这里插入图片描述

      一段大白话,听的明明白白的同学们,记得收藏转发一波,或许,你能帮到别人!

      所以,从隔离性的实现原理上,我们可以看出这是一场数据的可靠性与性能之间的权衡。

    4、一致性原理

      一致性,我们要保障的是数据一致性,数据库中的增删改操作,使数据库不断从一个一致性的状态转移到另一个一致性的状态

      事务该回滚的回滚,该提交的提交,提交后该持久化磁盘的持久化磁盘,该写缓冲池的写缓冲池+写日志;对于数据可见性,通过四种隔离级别进行控制,使得库表中的有效数据范围可控,保证业务数据的正确性的前提下,进而提高并发程度,支撑服务高QPS的稳定运行,保证数据的一致性,这就是咱们叨叨叨说的清楚想不明白的数据库ACID四大特性。

    总结

      希望通过本篇文章你熟知并搞懂了我们天天说的数据库ACID四大特性,本文中我们一起串联了起来,相信你不会在忘记某一个,打麻将三缺一怎么行?

      好了,多了就不说了,我劝你耗子尾汁,但推荐你关注我,因为我会让你在快乐中学会很多东西!


    MySQL系列文章汇总与《MySQL江湖路 | 专栏目录》

    往期热门MySQL系列文章

    展开全文
  • 数据库ACID特性详解

    2019-02-12 10:35:41
    数据库ACID特性详解 我们在大学中学到的数据库基本理论中,是指由一系列连续的数据库操作组成的一个完整的逻辑过程。事务(Transaction)是并发控制的基本单位。所谓事务,它是一个操作序列,这些操作要么都执行,...

    数据库的ACID特性详解

    我们在大学中学到的数据库基本理论中,是指由一系列连续的数据库操作组成的一个完整的逻辑过程。事务(Transaction)是并发控制的基本单位。所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。

    1、数据库事务在 数据库管理系统(DBMS)中,必须具备ACID特性,ACID是Atomic(原子性)、Consistency(一致性)、Isolation(隔离性)和Durability(持久性)的英文缩写。

    1)原子性(Atomicity)

    事务的原子性指的是,一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。

    2)一致性(Consistency)

    事务的一致性指的是,在一个事务执行之前和执行之后数据库都必须处于一致性状态。如果事务成功地完成,那么系统中所有变化将正确地应用,系统处于有效状态。如果在事务中出现错误,那么系统中的所有变化将自动地回滚,系统返回到原始状态。

    3)隔离性(Isolation)

    事务的隔离性指的是,在并发环境中,隔离性是指两个事务之间互不干扰。由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。事务查看数据更新时,数据所处的状态要么是另一事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看到中间状态的数据。

    4)持久性(Durability)

    事务的持久性指的是,只要事务成功结束,它对数据库所做的更新就必须永久保存下来。即使发生系统崩溃,重新启动数据库系统后,数据库还能恢复到事务成功结束时的状态。

    事务的四个隔离级别:

    1)未提交读(Read Uncommitted):
    SELECT语句以非锁定方式被执行,所以有可能读到脏数据,隔离级别最低。(读不锁)

    2)提交读(Read Committed):
    只能读取到已经提交的数据。即解决了脏读,但未解决不可重复读。(读锁,等写完)

    3)可重复读(Repeated Read):
    在同一个事务内的查询都是事务开始时刻一致的,InnoDB的默认级别。在SQL标准中,该隔离级别消除了不可重复读,但是还存在幻读。(写锁,等读完)

    4)串行读(Serializable):
    完全的串行化读,所有SELECT语句都被隐式的转换成SELECT … LOCK IN SHARE MODE,即读取使用表级共享锁,读写相互都会阻塞。隔离级别最高。

    事务并发问题

    1)脏读(Dirty Reads):
    事务A读取了事务B的更新的数据,但是事务B回滚了,导致A读取的为脏数据。

    2)不可重复读(Non-Repeatable Reads):
    事务A读取同一数据两次,但是在两次之间事务B对该数据进行了修改并提交,导致事务A读取两次读取不一致。

    3)幻读(Phantom Reads):
    事务A修改全表的数据,在未提交时,事务B向表中插入或删除数据,导致事务A读取的数据与需要修改的数据不一致。

    PS: 不可重复读针对的时数据的修改,幻读针对的时数据的新增和删除。解决不可重复读问题只需要给对应记录上行锁,而解决幻读需要对表加锁

    隔离级别导致事务并发问题

    在这里插入图片描述

    实现事物隔离性主要有两种方式

    隔离的实现主要有读写锁和MVCC(Multi-Version Concurrency Control)多版本并发处理方式

    展开全文
  • 数据库四大特性ACID

    2018-10-30 18:49:07
     本篇讲诉数据库中事务的四大特性ACID),并且将会详细地说明事务的隔离级别。  如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity)  原子性是指事务包含的所有...
  • 数据库ACID特性

    2018-09-22 11:12:35
    ACID,是指数据库管理系统(DBMS)在写入或更新资料的过程中,为保证事务(transaction)是正确可靠的,所必须具备的四个特性:原子性(atomicity,或称不可分割性)、一致性(consistency)、隔离性(isolation,又...
  • 关系型数据库ACID特性 A:原子性 C:一致性 I:隔离性 D:永久性 一致性的金典解读案例: [img]http://dl2.iteye.com/upload/attachment/0130/2382/42b5b2db-fa4b-3f6a-9d17-61144c45acbe.jpg[/img] 解读...
  • 数据库ACID四大特性

    2020-10-23 16:04:05
    ACID特性 详解 原子性 原子性是指事务是一个不可再分割的工作单元,事务中的操作要么都发生,要么都不发生。 可采用“A向B转账”这个例子来说明解释 在DBMS中,默认情况下一条SQL就是一个单独事务,事务是自动提交...
  • 主要介绍了数据库ACID特性术语详解,ACID就是:原子性(Atomicity )、一致性( Consistency )、隔离性( Isolation)和持久性(Durabilily),本文分别解释了它们,需要的朋友可以参考下
  • ACID特性和分布式系统CAP理论事物的介绍和认识事务通常指的是数据库事务,不要把它太概念化,就是一些列操作要么都执行要么都不执行,把这些操作封装在一个不可分割的单元体里这么理解就可以。//备注最常见用来举例...
  • ACID特性数据库管理系统中事务(transaction)的四个特性(分析时根据首字母缩写依次解释):原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)所谓事务,它是一个操作序列,...
  • 数据库事务ACID特性

    千次阅读 2018-09-24 13:56:36
    文章目录ACID特性详解1. 原子性2. 一致性3. 隔离性4. 持久性 ACID特性 数据库管理系统中事务(transaction)的四个特性(分析时根据首字母缩写依次解释):原子性(Atomicity)、一致性(Consistency)、隔离性...
  • 数据库ACID

    千次阅读 2019-05-07 17:28:15
    谈谈数据库ACID 一.事务 定义:所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。 准备工作:为了说明事务的ACID原理,我们使用银行账户及资金管理的案例进行分析...
  • 数据库事务的ACID特性

    2019-04-07 18:29:36
    如果数据库引擎能够成功的对数据库应用该组查询的全部语句,那么就执行该组查询。如果其中有任何一条语句因为崩溃或其他原因无法执行,那么剩余没有执行的所有语句都不会执行,执行过的语句回滚(rollback),恢复到这...
  • 文章目录ACID特性#1 原子性#2 一致性#3 隔离性#4 持久性 ACID特性 数据库管理系统中事务(transaction)的四个特性(分析时根据首字母缩写依次解释):原子性(Atomicity)、一致性(Consistency)、隔离性...
  • 事务(Transaction),是我们关系型数据库中非常重要的一个概念,它要符合ACID特性。是由一组SQL语句组成的一个程序执行单元(Unit),该执行单元要么成功Commit,要么失败Rollback。 ACID特性 Atomicity ...
  • 数据库ACID四个特性介绍

    千次阅读 2019-06-08 00:54:29
    DBMS事务的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability) 事务:它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。 ...
  • 数据库acid实现原理(二)

    千次阅读 2020-08-18 00:05:37
    事务(Transaction)是访问和更新数据库的程序执行单元;事务中可能包含一个或多个sql语句,这些语句要么都执行,要么都不执行。作为一个关系型数据库,MySQL支持事务,本文介绍基于MySQL5.6。 首先回顾一下MySQL...
  • 数据库ACID特性解释

    2017-10-09 16:01:02
    1、牛客网题目:虽然之前看过acid特性,但是应该还是理解不够到位,再次记录一下。 2、参考文章:http://blog.csdn.net/u012440687/article/details/52116108 ACID特性 数据库管理系统中事务(transaction)的...
  • 关于事务的ACID特性Atomicity(原子性)Isolation(隔离性)Durability(持久性)Consistency(一致性) 我们都知道事务的四大特性ACID,但是对于每个特性的含义尤其是一致性网上的资料很多都解释的不是很清楚。最近...
  • 什么是数据库ACID测试

    千次阅读 2016-09-08 12:06:40
    钻石显然是十分贵重的东西,正因为贵重,所以我们会严肃的区分真品和膺品。确定钻石是真是假的一个简单而(至少在电影里)流行的测试是让它在一片玻璃上滚。因为钻石是众所周知最坚硬的材料,...您还希望数据库允许多
  • 数据库事务的四大特性ACID

    千次阅读 2019-06-18 17:10:04
    数据库事务的四大特性 1, 什么是数据库事务? 数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。 意思就是一连串的数据库操作,即一串增删查改的集合。 2, 数据库事务做了什么? ...
  • **1.原子性和一致性:**在操作数据之前,首先将数据备份到一个地方(这...隔离性:**通过数据库锁的机制实现的 **3.持久性:**和 Undo Log 相反,Redo Log 记录的是新数据的备份。在事务提交前,只要将 Redo Log 持...
  • 谈谈数据库ACID  帅宏军 一.事务  定义:所谓事务,...
  • 本文将首先介绍MySQL事务相关的基础概念,然后介绍事务的ACID特性,并分析其实现原理。MySQL博大精深,文章疏漏之处在所难免,欢迎批评指正。 事务(Transaction)是访问和更新数据库的程序执行单元;事务中可能包含...
  • 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity)  原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 55,962
精华内容 22,384
关键字:

数据库acid特性