什么是数据库事务?

Vla*_*dim 95 database theory concurrency failover transactions

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

Vil*_*lx- 216

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

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

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


Jon*_*eet 70

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

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

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

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


sha*_*oth 36

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

accountA -= 100;
accountB += 100;
Run Code Online (Sandbox Code Playgroud)

要么

accountB += 100;
accountA -= 100;
Run Code Online (Sandbox Code Playgroud)

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

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

beginTransaction;
accountB += 100;
accountA -= 100;
commitTransaction;
Run Code Online (Sandbox Code Playgroud)

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


Rad*_*Rad 31

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

  • 不仅是数据库.我们可以将这个概念扩展到其他组件 - 例如排队服务或外部系统的状态.因此,"一系列数据操作语句必须完全完成或完全失败,使系统保持一致状态" (2认同)

小智 10

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

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

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

事务支持所谓的ACID属性:

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


Ste*_*nne 5

http://en.wikipedia.org/wiki/Database_transaction
http://en.wikipedia.org/wiki/ACID
ACID =原子性、一致性隔离性、持久

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