有人可以提供一个简单的(但不能简单到可能的程度)解释一个应用于计算的事务(即使是从维基百科复制的)吗?
Http://en.wikipedia.org/wiki/database_transaction Http://en.wikipedia.org/wiki/acid 断裂度,C一致性,我隔离度,D耐久性
如果希望在单个事务中涉及多个事务资源,则需要使用类似于 两阶段提交解决方案的东西。XA得到了广泛的支持。
必须完全完成或完全失败的一系列数据操作语句,使数据库处于一致状态
这里有一个简单的解释。你需要把100美元从账户 A 转到账户 B。你可以这样做:
accountA -= 100; accountB += 100;
或者
accountB += 100; accountA -= 100;
如果第一次和第二次手术出了问题,你就有麻烦了——要么是100块钱不见了,要么就是凭空冒出来的。
事务是一种机制,允许您标记一组操作,并以这样的方式执行它们: 要么它们都执行(提交) ,要么系统状态就像它们根本没有开始执行(回滚)。
beginTransaction; accountB += 100; accountA -= 100; commitTransaction;
要么转100块,要么两个账户都保持初始状态。
事务是表示状态变化的一种方式,理想情况下,事务有四个属性,通常称为 ACID:
有关详细信息,请参阅 Wikipedia 酸条目。
虽然这通常应用于数据库,但不一定非得如此(具体地说,请参见 软件事务内存)
事务是您希望将其视为“整体”的工作单元它要么全部发生,要么根本不发生。
一个经典的例子是将钱从一个银行账户转移到另一个账户。要做到这一点,您必须首先从源帐户中提取金额,然后将其存入目标帐户。行动必须完全成功。如果你中途停止,钱就会丢失,这是非常糟糕的。
在现代数据库中,事务还可以做一些其他的事情——比如确保您不能访问其他人已经写了一半的数据。但是基本思路是一样的——交易是为了确保 无论发生什么情况,您使用的数据都将处于合理的状态。他们保证不会出现这样的情况: 钱从一个账户取出,但不存入另一个账户。
我建议给“事务处理”下个定义会更有用,因为它涵盖了计算机科学中的事务这一概念。
来自维基百科:
在计算机科学中,事务处理是信息处理,分为单独的、不可分割的操作,称为事务。每个事务必须作为一个完整的单元成功或失败,不能保持在一个居间态中。
Http://en.wikipedia.org/wiki/transaction_processing#implementations
我认为就 DBMS 而言,事务是一个原子操作。
这意味着它不能被分离。是的,在一个转换中,可能有几个指令要系统执行。但它们被绑在一起完成一项基本任务。
比如说。你需要走过一座桥(让我们把它当作一次转变) ,要做到这一点,比如说,你需要走100步。总的来说,这些步骤不能分开。当你完成了一半的时候,你只有两个选择: 继续完成它们,然后回到起点。它就像事务的结果: 成功(提交)和失败(回滚)
除了上述反应之外,应该指出,至少在理论上,对于交易涉及何种资源没有任何限制。
在大多数情况下,它只是一个数据库或多个不同的数据库,但也可以想象,打印机参与事务,并可能导致该事务失败,例如在纸张堵塞的情况下。
事务是将一个或多个 SQL 操作作为一个单元处理的序列。
具体来说,每个事务似乎都是独立运行的,而且,如果系统失败,每个事务要么全部执行,要么不全部执行。
交易的概念是由两个完全独立的关注点驱动的。 一个与多个客户端并发访问数据库有关,另一个与此有关 拥有一个对系统故障有弹性的系统。
事务支持所谓的 ACID 属性:
事务是数据处理的一个不可分割的单元 - 所有交易必须具有 ACID 属性:
即: 原子性,一致性,孤立性和持久性 交易是全部或者没有,但不是中间的(这意味着如果你把钱从一个账户转到另一个账户,一个账户必须损失那么多,另一个账户必须得到那么多,但是如果你从一个账户转钱,另一个账户仍然是空的,那就不是交易)
事务可以定义为被视为最小处理单元的任务集合。每个最小处理单元不能进一步分割。
事务的主要操作是读和写。
为了确保准确性、完整性和数据完整性,所有事务必须包含四个通常称为 ACID 属性的属性。
事务-只是一组逻辑组合的操作,您希望所有这些操作一起提交或回滚。
根据数据库基础书籍(Sharma,et al。 ,2010,p. 162) ,事务或工作单元是一组数据库操作,所有这些操作都应该被成功执行,以便调用事务成功。
例如,如果一家银行必须将1,000美元从账户 A 转移到账户 B,那么在转移成功之前需要采取以下步骤。
参考文献:
夏尔马,北卡罗来纳州,Perniu,L。 ,Chong,rf,Iyer,a。 ,南丹,c。 ,Mitea,a。 ,Nonvinkere,M & Danubianu,m。(2010)。数据库基础。