什么是数据库事务?


Answers:


239

事务是您要视为“整体”的工作单元。它必须全部发生或根本不发生。

一个典型的例子是将钱从一个银行帐户转到另一个银行帐户。为此,您必须先从源帐户中提取金额,然后将其存入目标帐户。该操作必须完全成功。如果中途停止,钱将会丢失,这是非常糟糕的。

在现代数据库中,事务还可以做其他一些事情-例如,确保您不能访问其他人写的一半的数据。但是基本思想是相同的-事务可以确保无论发生什么情况,您使用的数据都将处于明智的状态。他们保证在任何情况下都不会从一个帐户中提取资金,而不会将其存入另一个帐户。


感谢您给出的非常简单的示例
Nomadme,2016年

很好的解释!
Yan Myo Aung

81

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

  • 原子的(如果更改已提交,则只需一键即可完成;您永远看不到“一半的更改”)
  • 一致的(只有在系统的新状态有效时才能发生更改;任何尝试提交无效更改的尝试都将失败,从而使系统保持其先前的有效状态)
  • 隔离(在提交之前,没有人看到交易的任何部分)
  • 持久(一旦更改发生-如果系统说交易已经提交,客户就不必担心“刷新”系统以使更改“坚持”)

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

尽管这通常应用于数据库,但不一定如此。(特别是,请参阅软件事务存储。)


46

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

accountA -= 100;
accountB += 100;

要么

accountB += 100;
accountA -= 100;

如果这对中的第一个操作和第二个操作之间出现问题,则您有问题-100美元消失了,或者它们突然出现了。

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

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

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


31

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


2
不仅是数据库。我们可以将此概念扩展到其他组件-排队服务或外部系统状态。因此,“A系列数据操作语句必须要么全部完成或完全失败的,一致的状态离开系统”
米哈尔Chaniewski

10

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

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

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

事务支持所谓的ACID属性:

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



1

除上述答复外,应注意的是,至少在理论上,对交易涉及哪种资源没有任何限制。

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


1

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

事务的主要操作是读写。

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


0

我认为,对于DBMS而言,事务是一项原子动作。

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

例如。您需要走过一座桥(让我们将其视为横断面),例如,这需要100步。总的来说,这些步骤不能分开。当您完成其中一半时,只有两种选择:继续完成所有步骤,然后回到起点。就像交易的结果一样:success(commit)和fail(rollback)


0

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.