为了完成对数据的操作,企业应用经常要求并发访问在多个构件之间共享的数据。这些应用在下列条件下应该维护数据的完整性(由应用的商务规则来定义):

分布式访问一个单独的数据资源,以及从一个单独的应用构件访问分布式资源。 
在这种情况,可能要求在(分布式)资源上的一组操作被当作一个工作单元(unit)。在一个工作单元中, 操作的所有部分一起成功或失败并恢复。在下面的情况下这个问题更加复杂:

通过一组分布式的、访问多个资源的数据的构件实现一个工作单元,和/或部分操作是被顺序执行的或在要求协调和/或同步的并行线程中。

在所有情况下, 都要求应用维护一个工作单元的成功或失败。在失败的情况下,所有资源要把数据状态返回到以前的状态 
(比如说,工作单元开始前的状态)。 
事务的概念和和事务管理器(或者一个事务处理服务)在一个工作单元中的维护数据完整性,这就简化了这样的企业级别分布式应用的构造。

一个事务是有下列属性的一个工作单元:

原子性(ATOMICITY): 
一个事务要被完全的无二义性的做完或撤消。在任何操作出现一个错误的情况下,构成事务的所有操作的效果必须被撤消,数据应被回滚到以前的状态。

一致性(CONSISTENCY): 
一个事务应该保护所有定义在数据上的不变的属性(例如完整性约束)。在完成了一个成功的事务时,数据应处于一致的状态。换句话说,一个事务应该把系统从一个一致-状态转换到另一个一致状态。举个例子,在关系数据库的情况下, 
一个一致的事务将保护定义在数据上的所有完整性约束。

隔离性(ISOLATION): 
在同一个环境中可能有多个事务并发执行,而每个事务都应表现为独立执行。串行的执行一系列事务的效果应该同于并发的执行它们。这要求两件事:

在一个事务执行过程中,数据的中间的(可能不一致)状态不应该被暴露给所有的其他事务。 
两个并发的事务应该不能操作同一项数据。数据库管理系统通常使用锁来实现这个特征。

持久性(DURABILITY): 
一个被完成的事务的效果应该是持久的。

****************************************************************************************************************************************************************************************************************************

****************************************************************************************************************************************************************************************************************************

【考点】
数据库事务基础知识。
【出现频率】
★★★☆☆
【解答】
事务提供了一种机制,可用来将一系列数据库更改归入一个逻辑操作。更改数据库后,所做的更改可以作为一个单元进行提交或取消。事务可确保遵循原子性、一致性、隔离性和持续性(ACID)这几种属性,以使数据能够正确地提交到数据库中。
使用事务机制的好处非常明显,例如银行转账之类的交易操作中,事务有着重要的作用。事务的成功取决于事务单元帐户相互依赖的操作行为是否能全部执行成功,只要有一个操作行为失败,整个事务将失败。例如:客户A和客户B的银行账户金额都是10000元人民币,客户A需要把自己帐户中的5000元人民币转到客户B的账户上。这个过程看似简单,实际上涉及了一系列的数据库操作,可以简单地视为两步基本操作,即从客户A帐户的金额中扣除5000元人民币,以及将客户B帐户中金额添加5000元人民币。假设第1步数据库操作成功,而第二步失败的话,将导致整个操作失败,并且客户A帐户金额将被扣除5000元人民币。事务机制可以避免此类情况,以保证整个操作的完成,如果某步操作出错,之前所作的数据库操作将全部失效。
【分析】
事务是单个的工作单元。如果某个事务成功,则在该事务中进行的所有数据更改均会提交,成为数据库中的永久组成部分。如果事务遇到错误且必须取消或回滚,则所有数据更改均被清除。一个逻辑工作单元必须有ACID属性,只有这样才能成为一个事务。ACID属性有以下4个属性。
1.原子性
事务必须是原子工作单元。对于其数据修改,要么全都执行,要么全都不执行。
2.一致性
事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构都必须是正确的。
3.隔离性
由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。事务识别数据时数据所处的状态,或者是另一个并发事务修改它之前的状态,或者是第二个事务修改它之后的状态,事务不会识别中间状态的数据。这称为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。
4.持久性
事务完成之后,它对于系统的影响是永久性的。该修改即使出现系统故障也将一直保持。
事务有以下3种运行模式。
q      自动提交事务:每条单独的语句都是一个事务。
q      显式事务:每个事务均以BEGIN TRANSACTION语句显式开始,以COMMIT或ROLLBACK语句显式结束。
q      隐性事务:在上个事务完成时新事务隐式启动,但每个事务仍以COMMIT或ROLLBACK语句显式完成。
说明:还有一种批处理级事务模式,该模式仅应用于多活动结果集(MARS),在MARS会话中启动的Transact-SQL显式或隐式事务变为批处理级事务。当批处理完成时没有提交或回滚的批处理级事务自动由SQL Server进行回滚。

什么是事务(transaction)?它有什么好处相关推荐

  1. FireDAC 下的 Sqlite [7] - 备份、优化、事务(Transaction)

    用 TFDSQLiteBackup 控件, 两三行代码即可完成 Sqlite 数据库的备份. procedure TForm1.Button1Click(Sender: TObject); begin ...

  2. 化零为整WCF(14) - 事务(Transaction)

    [索引页] [源码下载] 化零为整WCF(14) - 事务(Transaction) 作者:webabcd 介绍 WCF(Windows Communication Foundation) - 事务( ...

  3. 什么是事务(Transaction)

    摘要:事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元.事务通常由高级数据库操纵语言或编程语言书写的用户程序的执行所引起,并用形如begin transaction和 ...

  4. MySQL事务(transaction) (有这篇就足够了..)

    MySQL事务处理(TransAction) 大家好,我是胡亦,一名热爱分享技术干货的博主. 思考了很久,决定写一篇关于mysql事务(transaction)的博客,一来嘛,因为最近在复习mysql ...

  5. Oracle 存储过程 中如何使用事务Transaction 自主事务 自治事务

    Oracle基础 存储过程和事务 一.事务和存储过程 在存储过程中如何使用事务.当需要在存储过程中同时执行多条添加.修改.删除SQL语句时,为了保证数据完整性,我们需要使用事务.使用方式和在PL-SQ ...

  6. 数据库事务(Transaction)的ACID特性解释

    事务(Transaction)是并发控制的基本单位.所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位.例如,银行转帐工作:从一个帐号扣款并使另一个帐号增款,这两 ...

  7. redis 在 php 中的应用(事务 [ Transaction ] 篇)

    本文为我阅读了 redis参考手册 之后编写,注意 php_redis 和 redis-cli 的区别(主要是返回值类型和参数用法) 目录: Transaction(事务) WATCH UNWATCH ...

  8. python django事务transaction源码分析

    2019独角兽企业重金招聘Python工程师标准>>> python Django事务 网上关于django1.6的事务资料很多,但是1.8的却搜不到任何资料,自己要用的时候费了不少 ...

  9. spring事务(Transaction)的七种事务传播行为及五种隔离级别

    1. 首先,说说什么事务(Transaction) 事务,就是一组操作数据库的动作集合.事务是现代数据库理论中的核心概念之一. 如果一组处理步骤或者全部发生或者一步也不执行,我们称该组处理步骤为一个事 ...

  10. Spring事务 Transaction rolled back because it has been marked as rollback-only

    前言 使用Spring事务时,出现异常:org.springframework.transaction.UnexpectedRollbackException: Transaction rolled ...

最新文章

  1. Testing Windows Live Writer 2
  2. Java内存数据库-H2介绍及实例(SpringBoot)
  3. Ext2.2系列(50篇)
  4. 京东「卖家日志」系统的构建 | 流式计算日志系统应用实践
  5. linux kvm安装windows,Linux下KVM安装windows
  6. 导师没项目怎么办?不如看看这些
  7. 解决浏览器兼容性问题面试题_如果不解决技术面试问题,就无法解决技术多样性问题。 这是数据。...
  8. 2019年12月中国编程语言排行和薪资分析
  9. php markdown 电子书_PHP Markdown转PDF解决方案
  10. javascript类式继承函数最优版
  11. POJ 1002 UVA 755 487--3279 电话排序 简单但不容易的水题
  12. 关于Adobe fireworks cs6
  13. DMR对讲机的基本概念理解
  14. ubuntu14.04彻底卸载ibus安装fcitx拼音输入法
  15. VP9编码(3)-- 符号
  16. ASM PCRP21-100-1-SSI-KAB5M
  17. 利用python库moviepy,快速剪辑视频
  18. 文件下载到本地的几种方法
  19. 人工神经网络模型定义,人工智能神经网络模型
  20. 大数据项目之电商数仓、数据仓库概念、项目需求及架构设计

热门文章

  1. 10-20国际电极标准系统
  2. 如何设计Lighthouse定位接收电路
  3. “接着奏乐接着舞”,大脑也是这么想的
  4. 代码变油画,精细到毛发,这个前端小姐姐只用HTML+CSS,让美术设计也惊叹丨GitHub热榜...
  5. 谷歌二季度净利同比增211%,英特尔降17%,两个公司盘后股价都大涨
  6. 驱动调试(二)-环形缓冲区到文件
  7. oracle addm报告
  8. angular 学习理解笔记
  9. 【luogu 3375】【模板】KMP字符串匹配
  10. [TypeScript] Using Interfaces to Describe Types in TypeScript