【问题标题】:What is a database transaction?什么是数据库事务?
【发布时间】:2010-11-01 18:07:27
【问题描述】:

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

【问题讨论】:

    标签: database concurrency transactions theory failover


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢这个非常简单的例子
    • 很好的解释!
    【解决方案2】:

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

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

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

    虽然这通常应用于数据库,但并非必须如此。 (具体见Software Transactional Memory。)

    【讨论】:

      【解决方案3】:

      这里有一个简单的解释。您需要将 100 美元从账户 A 转入账户 B。您可以这样做:

      accountA -= 100;
      accountB += 100;
      

      accountB += 100;
      accountA -= 100;
      

      如果这对中的第一次和第二次操作之间出现问题,您就有问题了 - 100 美元要么消失了,要么突然出现。

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

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

      要么转账 100 美元,要么让两个账户都处于初始状态。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 不仅是数据库。我们可以将此概念扩展到其他组件——如排队服务或外部系统的状态。因此,“一系列必须完全完成或完全失败的数据操作语句,使系统处于一致状态”
        【解决方案5】:

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

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

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

        事务支持所谓的 ACID 属性:

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

        【讨论】:

          【解决方案6】:

          http://en.wikipedia.org/wiki/Database_transaction
          http://en.wikipedia.org/wiki/ACID
          ACID = Atomicity, Consistency, Isolation, Durability

          当您希望在单个事务中涉及多个事务资源时,您需要使用类似two-phase commit 的解决方案。 XA 得到了相当广泛的支持。

          【讨论】:

            【解决方案7】:

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

            来自维基百科:

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

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

            【讨论】:

              【解决方案8】:

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

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

              【讨论】:

                【解决方案9】:

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

                一个事务的主要操作是读写。

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

                【讨论】:

                  【解决方案10】:

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

                  例如,如果银行要从账户 A 向账户 B 转账 1,000 美元,则需要以下步骤才能成功转账。

                  • 账户A的余额减少1000元
                  • 账户B的余额增加1000

                  参考资料:

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

                  【讨论】:

                    【解决方案11】:

                    我认为事务在 DBMS 方面是一个原子操作。

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

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

                    【讨论】:

                      【解决方案12】:

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

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

                      【讨论】:

                        【解决方案13】:

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

                        【讨论】:

                          猜你喜欢
                          • 1970-01-01
                          • 2013-08-31
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 2013-11-11
                          相关资源
                          最近更新 更多