什么是数据库事务?

时间:2009-06-10 09:40:08

标签: database concurrency transactions theory failover

有人可以提供一个简单(但不简单)的交易解释,应用于计算(即使从维基百科复制)?

13 个答案:

答案 0 :(得分:197)

交易是您想要视为“整体”的工作单元。它必须完全发生或根本不发生。

一个典型的例子是将钱从一个银行账户转移到另一个银行账户。要做到这一点,您首先要从源帐户中提取金额,然后将其存入目标帐户。该行动必须全面取得成功。如果你中途停止,钱将会丢失,这是非常糟糕的。

在现代数据库中,事务还会执行其他一些操作 - 例如确保您无法访问其他人中途写入的数据。但基本的想法是一样的 - 交易是确保的,无论发生什么,你使用的数据都将处于合理的状态。他们保证不会出现从一个账户提取资金但不存入另一个账户的情况。

答案 1 :(得分:66)

交易是表示状态变化的一种方式。理想情况下,事务有四个属性,通常称为ACID:

  • Atomic(如果改变发生,它会一举发生;你永远看不到“半个变化”)
  • 一致(只有在系统的新状态有效时才会发生更改;任何提交无效更改的尝试都将失败,使系统处于先前的有效状态)
  • 隔离(在其提交之前,没有人看到交易的任何部分)
  • 持久(一旦发生变化 - 如果系统表明交易已经提交,客户不需要担心“刷新”系统以使更改“坚持”)

有关详细信息,请参阅Wikipedia ACID条目。

虽然这通常应用于数据库,但并非必须如此。 (特别是,请参阅Software Transactional Memory。)

答案 2 :(得分:34)

这是一个简单的解释。您需要将100美元从帐户A转移到帐户B.您可以执行以下操作:

accountA -= 100;
accountB += 100;

accountB += 100;
accountA -= 100;

如果对中的第一次和第二次操作之间出现问题,你就会遇到问题 - 100块钱已经消失,或者它们突然出现了。

事务是一种机制,允许您标记一组操作并以这样的方式执行它们:它们全部执行(提交),或者系统状态就好像它们根本没有开始执行一样(回滚)。

beginTransaction;
accountB += 100;
accountA -= 100;
commitTransaction;

将转移100美元或将两个帐户保留在初始状态。

答案 3 :(得分:31)

“必须完全完成或完全失败的一系列数据操作语句,使数据库保持一致状态”

答案 4 :(得分:10)

事务是一个或多个SQL操作的序列,它们被视为一个单元。

具体来说,每个事务似乎都是孤立运行的,而且,如果系统出现故障,每个事务都要么全部执行,要么不是全部执行。

交易的概念是由两个完全独立的问题所驱动的。 一个与多个客户端对数据库的并发访问有关,另一个与此有关 拥有一个能够抵御系统故障的系统。

交易支持所谓的ACID属性:

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

答案 5 :(得分:3)

http://en.wikipedia.org/wiki/Database_transaction
http://en.wikipedia.org/wiki/ACID
ACID = A tomicity, C onsistency, I solation, D urability

如果您希望在单个事务中涉及多个事务资源,则需要使用类似two-phase commit解决方案的内容。 XA受到广泛支持。

答案 6 :(得分:1)

我建议“交易处理”的定义会更有用,因为它将交易作为计算机科学的一个概念。

来自维基百科:

在计算机科学中,事务处理是信息处理,它被分成单独的,不可分割的操作,称为事务。每笔交易必须作为一个完整的单位成功或失败;它不能保持中间状态。

http://en.wikipedia.org/wiki/Transaction_processing#Implementations

答案 7 :(得分:1)

除了上述回复之外,应该注意的是,至少在理论上,对交易中涉及的资源类型没有任何限制。

大多数情况下,它只是一个数据库或多个不同的数据库,但也可以想象打印机参与交易,并且可能导致该交易失败,例如在卡纸的情况下。

答案 8 :(得分:1)

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

事务的主要操作是读写。

所有交易必须包含四个通常称为ACID属性的属性,以确保准确性,完整性和数据完整性。

答案 9 :(得分:1)

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

比如银行需要从A账户向B账户转账1000美元,那么在转账成功之前需要进行以下步骤。

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

参考文献:

Sharma, N., Perniu, L., Chong, R. F., Iyer, A., Nandan, C., Mitea, A. C., Nonvinkere, M. & Danubianu, M. (2010)。数据库基础知识。

答案 10 :(得分:0)

我认为事务是DBMS方面的原子操作。

这意味着它不能分开。是的,在转换中,系统可能有几条指令要执行。但他们被绑在一起完成一项基本任务。

例如,

。你需要走过一座桥(让我们将其视为一个转换),并且要做到这一点,比方说,你需要100个步骤。总的来说,这些步骤不能分开。当你完成其中一半时,你只有两个选择:继续完成所有选择,然后回到起点。它就像事务的结果:成功(已提交)和失败(回滚)

答案 11 :(得分:0)

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

即:原子性,一致性,隔离性和持久性 交易是全部或全无,但不是中间人(这意味着如果您将资金从一个账户转移到另一个账户,一个账户必须损失那么多而另一个账户必须获得该金额,但如果您从一个账户和另一个账户转账仍然是空的,不是交易)

答案 12 :(得分:0)

事务 - 只是一组逻辑组成的操作,您希望它们一起提交或回滚。