什么是数据库事务?

有人可以提供一个简单的(但不能简单到可能的程度)解释一个应用于计算的事务(即使是从维基百科复制的)吗?

132927 次浏览

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 属性:

  • 答: 原子性;
  • C: 一致性;
  • I: 隔离;
  • 耐久性。

事务是数据处理的一个不可分割的单元 - 所有交易必须具有 ACID 属性:

即: 原子性,一致性,孤立性和持久性 交易是全部或者没有,但不是中间的(这意味着如果你把钱从一个账户转到另一个账户,一个账户必须损失那么多,另一个账户必须得到那么多,但是如果你从一个账户转钱,另一个账户仍然是空的,那就不是交易)

事务可以定义为被视为最小处理单元的任务集合。每个最小处理单元不能进一步分割。

事务的主要操作是读和写。

为了确保准确性、完整性和数据完整性,所有事务必须包含四个通常称为 ACID 属性的属性。

事务-只是一组逻辑组合的操作,您希望所有这些操作一起提交或回滚。

根据数据库基础书籍(Sharma,et al。 ,2010,p. 162) ,事务或工作单元是一组数据库操作,所有这些操作都应该被成功执行,以便调用事务成功。

例如,如果一家银行必须将1,000美元从账户 A 转移到账户 B,那么在转移成功之前需要采取以下步骤。

  • 将账户 A 的余额减少1,000
  • 把账户 B 的余额增加1,000英镑

参考文献:

夏尔马,北卡罗来纳州,Perniu,L。 ,Chong,rf,Iyer,a。 ,南丹,c。 ,Mitea,a。 ,Nonvinkere,M & Danubianu,m。(2010)。数据库基础。