157

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

4

13 回答 13

305

事务是您希望将其视为“整体”的工作单元。它必须要么完全发生,要么根本不发生。

一个典型的例子是将钱从一个银行账户转移到另一个银行账户。为此,您必须首先从源账户中提取金额,然后将其存入目标账​​户。手术必须完全成功。如果你中途停下来,钱就会丢失,那是非常糟糕的。

在现代数据库中,事务还做一些其他的事情——比如确保你不能访问其他人写到一半的数据。但基本思想是相同的——事务的存在是为了确保无论发生什么,您使用的数据都将处于合理状态。他们保证不会出现从一个帐户中提取资金但未存入另一个帐户的情况。

于 2009-06-10T09:46:51.087 回答
102

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

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

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

尽管这通常应用于数据库,但并非必须如此。(特别是,请参阅软件事务内存。)

于 2009-06-10T09:45:50.420 回答
63

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

accountA -= 100;
accountB += 100;

或者

accountB += 100;
accountA -= 100;

如果这对中的第一次和第二次手术之间出现问题,你就有问题了——100 美元要么消失了,要么突然出现。

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

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

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

于 2009-06-10T09:45:40.387 回答
38

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

于 2009-06-10T09:43:32.873 回答
11

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

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

交易的概念是由两个完全独立的关注点推动的。一个与多个客户端对数据库的并发访问有关,另一个与拥有一个对系统故障具有弹性的系统有关。

事务支持所谓的 ACID 属性:

  • A:原子性;
  • C:一致性;
  • 一:隔离;
  • D:耐用性。
于 2014-02-27T19:07:18.087 回答
4

http://en.wikipedia.org/wiki/Database_transaction
http://en.wikipedia.org/wiki/ACID
ACID =原子、一致性孤独性、耐久性

当您希望在单个事务中涉及多个事务资源时,您将需要使用类似两阶段提交解决方案的东西。XA得到了相当广泛的支持。

于 2009-06-10T09:43:23.823 回答
2

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

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

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

参考:

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

于 2021-03-15T10:10:32.097 回答
1

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

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

于 2009-06-10T13:52:29.877 回答
1

我建议“事务处理”的定义会更有用,因为它涵盖了作为计算机科学概念的事务。

来自维基百科:

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

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

于 2009-06-10T09:47:25.160 回答
1

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

事务的主要操作是读写。

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

于 2017-09-14T10:11:29.537 回答
0

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

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

于 2014-03-21T11:32:10.427 回答
0

我认为就 DBMS 而言,事务是原子操作。

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

例如。你需要走过一座桥(让我们把它当作一个交易),并且要做到这一点,比如说,你需要 100 步。总的来说,这些步骤不能分开。当你完成了一半时,你只有两个选择:继续全部完成,然后回到起点。这就像事务的结果:成功(已提交)和失败(回滚)

于 2009-06-10T09:55:06.343 回答
0

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

于 2021-01-13T10:01:50.633 回答