精华内容
下载资源
问答
  • 数据库事务管理ACID

    2016-09-26 14:15:54
    一.事务  定义:所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。  准备工作:为了说明事务的ACID原理,我们使用银行...// 创建数据库 create table account( 

    一.事务

           定义:所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。

           准备工作:为了说明事务的ACID原理,我们使用银行账户及资金管理的案例进行分析。

     

           

    1. // 创建数据库  
    2. create table account(  
    3.    idint primary key not null,  
    4.    namevarchar(40),  
    5.    moneydouble  
    6. );  
    7.   
    8. // 有两个人开户并存钱  
    9. insert into account values(1,'A',1000);  
    10. insert into account values(2,'B',1000);  


    二.ACID

           ACID,是指在可靠数据库管理系统(DBMS)中,事务(transaction)所应该具有的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability.这是可靠数据库所应具备的几个特性.下面针对这几个特性进行逐个讲解.


    三.原子性

           原子性是指事务是一个不可再分割的工作单位,事务中的操作要么都发生,要么都不发生。

           1.案例

                  AB转帐100元钱

     

           

    1. begin transaction  
    2. update account set money= money - 100where name='A';  
    3. update account set money= money +100where name='B';  
    4. if Error then  
    5.        rollback  
    6. else  
    7.        commit  

     

           2.分析 

           在事务中的扣款和加款两条语句,要么都执行,要么就都不执行。否则如果只执行了扣款语句,就提交了,此时如果突然断电,A账号已经发生了扣款,B账号却没收到加款,在生活中就会引起纠纷。

     

           3.解决方法

           在数据库管理系统(DBMS)中,默认情况下一条SQL就是一个单独事务,事务是自动提交的。只有显式的使用start transaction开启一个事务,才能将一个代码块放在事务中执行。保障事务的原子性是数据库管理系统的责任,为此许多数据源采用日志机制。例如,SQL Server使用一个预写事务日志,在将数据提交到实际数据页面前,先写在事务日志上。


    四.一致性

           一致性是指在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。这是说数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。

           1.案例

           对银行转帐事务,不管事务成功还是失败,应该保证事务结束后ACCOUNT表中aaabbb的存款总额为2000元。

     

           2.解决方法

    保障事务的一致性,可以从以下两个层面入手

           2.1数据库机制层面

           数据库层面的一致性是,在一个事务执行之前和之后,数据会符合你设置的约束(唯一约束,外键约束,Check约束等)和触发器设置。这一点是由SQL SERVER进行保证的。比如转账,则可以使用CHECK约束两个账户之和等于2000来达到一致性目的

           2.2业务层面

       对于业务层面来说,一致性是保持业务的一致性。这个业务一致性需要由开发人员进行保证。当然,很多业务方面的一致性,也可以通过转移到数据库机制层面进行保证。


    五.隔离性

           多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其它事务运行效果。

           这指的是在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。事务查看数据更新时,数据所处的状态要么是另一事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看到中间状态的数据。

           Windows中,如果多个进程对同一个文件进行修改是不允许的,Windows通过这种方式来保证不同进程的隔离性:

       

           企业开发中,事务最复杂问题都是由事务隔离性引起的。当多个事务并发时,SQL Server利用加锁和阻塞来保证事务之间不同等级的隔离性。一般情况下,完全的隔离性是不现实的,完全的隔离性要求数据库同一时间只执行一条事务,这样会严重影响性能。想要理解SQL Server中对于隔离性的保障,首先要了解并发事务之间是如何干扰的.

           1.事务之间的相互影响

           事务之间的相互影响分为几种,分别为:脏读,不可重复读,幻读,丢失更新

     

           1.1脏读

           脏读意味着一个事务读取了另一个事务未提交的数据,而这个数据是有可能回滚的;如下案例,此时如果事务1回滚,则B账户必将有损失。

         

     

           1.2不可重复读

        不可重复读意味着,在数据库访问中,一个事务范围内两个相同的查询却返回了不同数据。这是由于查询时系统中其他事务修改的提交而引起的。如下案例,事务1必然会变得糊涂,不知道发生了什么。

     

           1.3幻读(虚读)

        幻读,是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样.

      

     

           1.4丢失更新

           两个事务同时读取同一条记录,A先修改记录,B也修改记录(B是不知道A修改过),B提交数据后B的修改结果覆盖了A的修改结果。

     

           2.理解SQL SERVER中的隔离级别

           数据库的事务隔离级别(TRANSACTION ISOLATION LEVEL)是一个数据库上很基本的一个概念。为什么会有事务隔离级别,SQL Server上实现了哪些事务隔离级别?事务隔离级别的前提是一个多用户、多进程、多线程的并发系统,在这个系统中为了保证数据的一致性和完整性,我们引入了事务隔离级别这个概念,对一个单用户、单线程的应用来说则不存在这个问题。

        为了避免上述几种事务之间的影响,SQL Server通过设置不同的隔离级别来进行不同程度的避免。因为高的隔离等级意味着更多的锁,从而牺牲性能。所以这个选项开放给了用户根据具体的需求进行设置。不过默认的隔离级别Read Commited符合了多数的实际需求.

     

    隔离级别

    脏读

    丢失更新

    不可重复读

    幻读

    并发模型

    更新冲突检测

    未提交读:Read Uncommited

    悲观

    已提交读:Read commited

    悲观

    可重复读:Repeatable Read

    悲观

    可串行读:Serializable

    悲观

        

           SQL Server隔离事务之间的影响是通过锁来实现的,通过阻塞来阻止上述影响。不同的隔离级别是通过加不同的锁,造成阻塞来实现的,所以会以付出性能作为代价;安全级别越高,处理效率越低;安全级别越低,效率高。

     

           使用方法:SET TRANSACTIONISOLATION LEVEL REPEATABLE READ

     

           未提交读: 在读数据时不会检查或使用任何锁。因此,在这种隔离级别中可能读取到没有提交的数据。  

           已提交读:只读取提交的数据并等待其他事务释放排他锁。读数据的共享锁在读操作完成后立即释放。已提交读是SQL Server的默认隔离级别。 

           可重复读: 像已提交读级别那样读数据,但会保持共享锁直到事务结束。  

           可串行读:工作方式类似于可重复读。但它不仅会锁定受影响的数据,还会锁定这个范围。这就阻止了新数据插入查询所涉及的范围。


    六.持久性

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

           即使出现了任何事故比如断电等,事务一旦提交,则持久化保存在数据库中。

           SQL SERVER通过write-ahead transaction log来保证持久性。write-ahead transaction log的意思是,事务中对数据库的改变在写入到数据库之前,首先写入到事务日志中。而事务日志是按照顺序排号的(LSN)。当数据库崩溃或者服务器断点时,重启动SQL SERVERSQLSERVER首先会检查日志顺序号,将本应对数据库做更改而未做的部分持久化到数据库,从而保证了持久性。


    七.总结

           事务的(ACID)特性是由关系数据库管理系统(RDBMS,数据库系统)来实现的。数据库管理系统采用日志来保证事务的原子性、一致性和持久性。日志记录了事务对数据库所做的更新,如果某个事务在执行过程中发生错误,就可以根据日志,撤销事务对数据库已做的更新,使数据库退回到执行事务前的初始状态。

      数据库管理系统采用锁机制来实现事务的隔离性。当多个事务同时更新数据库中相同的数据时,只允许持有锁的事务能更新该数据,其他事务必须等待,直到前一个事务释放了锁,其他事务才有机会更新该数据。


    出处:http://blog.csdn.net/shuaihj/article/details/14163713

    展开全文
  • 事务的隔离性是通过数据库锁的机制实现的, 持久性通过 Redo Log(重做日志)来实现, 原子性和一致性通过 Undo Log 来实现。 Undo Log的原理: Undo Log 的原理很简单,为了满足事务的原子性,在操作任何数据之前...

    事务的 ACID 是通过 InnoDB 日志和锁来保证。

    • 事务的隔离性是通过数据库锁的机制实现的,
    • 持久性通过 Redo Log(重做日志)来实现,
    • 原子性和一致性通过 Undo Log 来实现。

    Undo Log的原理:
    Undo Log 的原理很简单,为了满足事务的原子性,在操作任何数据之前,首先将数据备份到一个地方(这个存储数据备份的地方称为 Undo Log)。然后进行数据的修改。如果出现了错误或者用户执行了 Rollback 语句,系统可以利用 Undo Log 中的备份将数据恢复到事务开始之前的状态。

    Redo Log的原理:
    和 Undo Log 相反,Redo Log 记录的是新数据的备份。在事务提交前,只要将 Redo Log 持久化即可,不需要将数据持久化。当系统崩溃时,虽然数据没有持久化,但是 Redo Log 已经持久化。系统可以根据 Redo Log 的内容,将所有数据恢复到最新的状态。

    展开全文
  • 数据库事务的ACID

    2017-04-11 15:40:52
    ACID是指在可靠数据库管理系统(DBMS)中,事务所具有的四个特性:原子性、一致性、隔离性、持久性。是由数据库管理系统来实现的。 通常采用日志来保证事务的原子性、一致性和持久性。日志记录了事务对数据库所做...

    ACID

    ACID是指在可靠数据库管理系统(DBMS)中,事务所具有的四个特性:原子性、一致性、隔离性、持久性。是由数据库管理系统来实现的。

    • 通常采用日志来保证事务的原子性、一致性和持久性。
    • 日志记录了事务对数据库所做的更新,如果某个事务在执行过程中发生错误,就可以根据日志,撤销事务对数据库已做的更新,使数据库退回到执行事务前的初始状态。
    • 采用锁机制来实现事务的隔离性。当多个事务同时更新数据库中相同的数据时,只允许持有锁的事务能更新该数据,其他事务必须等待,直到前一个事务释放了锁,其他事务才有机会更新该数据。

     

     

    原子性(Atomicity

    事务必须是原子工作单元:对于其修改,要么全都执行,要么全都不执行。(通常思想是使用copy落地老数据,然后执行修改,如果需要回滚则利用原先落地的老数据进行回滚)  

     


    一致性(Consistency

    事务在完成时,必须使所有的数据都保持一致状态。事务结束时,所有的内部数据结构(如 B 树索引或双向链表)都必须是正确的。某些维护一致性的责任由业务开发人员负责,他们必须确保应用程序已强制所有已知的完整性约束。例如,当在转帐时,应保证AB用户金钱之和的正确性。  

     


    隔离性(Isolation详情请看

    并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。

    当事务可序列化时将获得最高的隔离级别。

    由于高度隔离会限制可并行执行的事务数,所以一些应用程序降低隔离级别以换取更大的吞吐量。

     


    持久性(Durability

    事务完成之后,它对于系统的影响是永久性的。即使出现致命的故障也将一直保持。



    分布式事务

    详情请看

    展开全文
  • 简述数据库中的 ACID 分别是什么?

    千次阅读 2021-02-17 16:45:15
    ACID 原子性 定义:每个事务都是不可分割的最小工作单元,事务中的所有操作要么全成功,要么全失败。使用undo log实现回滚。 一致性 定义:比如A向B转账,A减少1000,B就得增加1000,两人的余额总和不能...
    • ACID

      • 原子性
        • 定义:每个事务都是不可分割的最小工作单元,事务中的所有操作要么全成功,要么全失败。使用undo log实现回滚。
      • 一致性
        • 定义:比如A向B转账,A减少1000,B就得增加1000,两人的余额总和不能变。
      • 隔离性
        • 定义:各个事务之间相互隔离,互不干扰。通过锁和MVCC实现隔离
      • 持久性
        • 定义:事务一旦提交,数据会永久的存储在数据库中。使用redo log实现故障恢复。
    • 实现原理

      • redo log

        • 定义: 包含redo log buffer(内存)和redo log file(磁盘),记录事务执行过程中数据修改后物理数据页面的信息。后台线程会将buffer中的数据同步到磁盘。

        • 流程图

        • 作用

          • 当mysql宕机时,如果buffer中还有数据没有同步到磁盘,可通过redo log 进行恢复(所以叫重做日志)。
          • 确保事务的持久性
        • 什么时候开始写redolog?什么时候释放redolog?

          • 当事务开始时就会写redolog
          • 当buffer中的数据页同步到磁盘后,redolog就会被释放重用。
        • 既然写redolog也有磁盘IO消耗,为什么不直接将数据写入磁盘呢?

          • 直接写磁盘是随机IO,写redolog是顺序IO,顺序IO比随机IO性能好。
          • 因为mysql加载数据到内存,最小单位是页,所以即使有很小的改动,也会将整页更新,造成大量无效IO。而redolog只包含真正要写入的部分
      • undo log

        • 定义:记录数据被修改前的信息(记录逆操作),用于回滚操作
        • 作用
          • 用于回滚事务的操作
          • 保证事务的原子性
      • 读写锁

        • 读锁(共享锁)
          • 定义:多个事务可以并发的读同一条数据,但不能同时写同一条数据
        • 写锁(排它锁)
          • 定义:一个事务拿到写锁之后,其他事务不能读也不能写这条数据
      • MVCC(Multi-Version Concurrency Control)多版本并发控制

        • 隐藏字段(mysql在创建表时,会为每张表创建几个隐藏字段)

          • row_id:行记录的唯一标志
          • transaction_id:事务id
          • roll_pointer:回滚指针,指向对应的undo log,用于回滚。
        • 作用

          • 提高并发性能,不需要加锁,处理读写冲突,利于读多写少的场景
        • 原理

          • 同一份数据为每个事务生成一个版本(由隐藏字段实现),每个事务只能读特定版本的数据(类似快照)
          • 不需要使用锁
          • 读与读之间不影响

      更多精彩请关注公众号(持续更新中)

     

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

    千次阅读 2017-11-02 17:52:26
    一.事务  定义:所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。  准备工作:为了说明事务的ACID原理,我们使用...// 创建数据库 create table account( idin
  • **1.原子性和一致性:**在操作数据之前,首先将数据备份到一个地方(这...隔离性:**通过数据库锁的机制实现的 **3.持久性:**和 Undo Log 相反,Redo Log 记录的是新数据的备份。在事务提交前,只要将 Redo Log 持...
  • 当与分布式数据库/存储(例如Cassandra)一起部署时,它不仅支持高度一致的ACID事务,而且可以线性扩展并实现高可用性。 安装 该库在上可用。 您可以使用构建工具(例如Gradle)将其安装在应用程序中。 例如,在...
  • 数据库事务的ACID及隔离级别

    千次阅读 2020-07-20 17:29:20
    文章目录ACID概念四大特性并发控制隔离级别串行化可重复读提交读未提交读默认隔离级别读现象举例脏读不可重复读幻...ACID特性是指数据库管理系统(DBMS)在写入或更新数据的过程中,为保证事务(transaction)是正确可
  • 数据库acid实现原理(二)

    千次阅读 2020-08-18 00:05:37
    一、基础概念 事务(Transaction)是访问和更新数据库的程序执行单元;...第二层:服务器层,负责查询语句的解析、优化、缓存以及内置函数的实现、存储过程等。 第三层:存储引擎,负责MySQL中数据的
  • 本文简要讲述了作者所理解的事务概念与ACID属性,并简要介绍了这四个属性在数据库中的实现方式。
  • 数据库ACID

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

    万次阅读 2018-11-19 00:25:55
    数据库的事务是并发控制的基本单位,是指逻辑上的一组操作,要么全部执行,要么全部不执行。 1、事务的特性: (1)原子性:事务是一个不可分割的工作单元,事务里的操作要么都成功,要么都失败,如果事务执行失败,...
  • 1. 事务 定义:所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作...// 创建数据库 create table account( idint primary key not null, namevarchar(40), moneydouble
  • ACID ,是指在数据库管理系统 (DBMS )中,事务 (transaction ) 所具有的四个特性:原子性(Atomicity) 、一致性(Consistency) 、隔离性(Isolation,又称独立性) 、持久性(Durability) 。 在...
  • 谈谈数据库ACID

    万次阅读 多人点赞 2013-11-05 11:59:14
    谈谈数据库ACID及隔离级别,理解其原理
  • 什么是ACID特性,数据库如何保证ACID特性的? ACID,是指在数据库管理系统(DBMS)中,事务(transaction)所具有的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久...
  • Atitit ACID解决方案2PC(两阶段提交) 跨越多个数据库实例的ACID保证   1.1. ACID解决方案 1 1.2. 数据库厂商在很久以前就认识到数据库...1.3. 基本上,数据库实现 ACID 最关键的技术是日志和锁。 2 1.4. I-
  • 说起数据库,可以不知道SQL,但一定不能不知道ACID数据库事务ACID四大原则: A 代表Atomicity,即原子性; C 表示Consistency,即一致性; I 表示Isolation,即隔离性; D 表示Durability,即持久性。 二、...
  • 数据库事务ACID

    2016-03-25 16:54:24
    ACID,是指数据库管理系统(DBMS)在写入/更新资料的过程中,为保证事务(transaction)是正确可靠的,所必须具备的四个特性:原子性(atomicity,或称不可分割性)、一致性(consistency)、隔离性(isolation,又...
  • 数据库ACID

    2019-05-27 13:44:10
    ACID,指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。一个支持事务(Transaction)的数据库,必须要具有这四种特性,...
  • 数据库ACID是什么

    千次阅读 2019-06-22 21:55:26
    一、事务本质上有四个特点ACID: Atomicity 原子性 Consistency 一致性 Isolation 隔离性 Durability 耐久性 原子性 原子性任务是一个独立的操作单元,是一种要么全部是,要么全部不是的原子单位性的操作。 一致性...
  • 数据库ACID原则本文来自谈谈数据库ACID数据库ACID原则 事务 ACID Atomicity 原子性 Consistency 一致性 Isolation 隔离性 Durability 持久性 总结 事务定义:所谓事务,它是一个操作序列,这些操作要么都执行...
  • 数据库事务的ACID四大特性以及MySQL中的隔离级别 事务是一个单独的逻辑工作单元,事务中的所有更新操作要么都执行,要么都不执行。事务保证了一系列更新操作的原子性。如果事务之间存在并发操作,则可以通过食物...
  • 数据库ACID特性详解

    2019-02-12 10:35:41
    数据库的ACID特性详解 我们在大学中学到的数据库基本理论中,是指由一系列连续的数据库操作...1、数据库事务在 数据库管理系统(DBMS)中,必须具备ACID特性,ACID是Atomic(原子性)、Consistency(一致性)、I...
  • 数据库 事务的特性ACID

    千次阅读 2014-07-27 09:26:30
    数据库 事务的特性ACID 事务(Transaction)是并发控制的基本单位。... 所谓事务,它是一个操作序列,这些操作要么都执行,要么都不... 数据库事务必须具备ACID特性,ACID是Atomic(原子性)、Consistency(一致
  • 数据库ACID 属性

    千次阅读 2016-07-23 22:28:40
    原文链接:https://en.wikipedia.org/wiki/ACID在计算机科学中,ACID(Atomicity 原子性、Consistency 一致性、Isolation 隔离性、Durability 持久性)是一系列属性。这些属性保证了数据库事物的可靠。在数据库中,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 64,329
精华内容 25,731
关键字:

数据库是怎么实现acid的