即使没有明确使用事务,ACID投诉SQL数据库仍然是“ACID”吗?

问题描述 投票:2回答:1

假设我使用的是标准的SQL引擎(例如Postgres,MySQL ......)。

如果我在进行查询时没有明确说出“开始交易”和“结束交易”

(比如“INSERT INTO students ...”),

  1. 它会“安全”吗?
  2. 我是否失去了由RDBMS实施的“ACID”的属性?如果提出了很多请求,我的申请现在可以不一致吗?
  3. 只有在我使用交易时,RDBMS才能保证ACID吗?
  4. 我在我的应用程序代码中创建的每个写入查询都必须是一个在我的应用程序中享受ACID属性的事务吗?
mysql sql sql-server postgresql transactions
1个回答
3
投票

您询问的行为因数据库而异。

使用PostgreSQL和Microsoft SQL Server,如果不使用“begin transaction”...“end transaction”,则每个语句都被视为一个事务。此行为通常被描述为“自动提交”,您可以将其作为MySQL中的选项进行切换。

应根据应用程序的需要定义事务。经典案例是,如果您从我这里购买东西,那么这笔钱必须离开您的账户并作为一笔交易到达我的账户。要么两个动作都成功,要么两个都失败。因此,在这种情况下,即使使用自动提交,您也必须在两个声明周围加上“开始交易”...“结束交易”,否则这笔钱可能会留下您的帐户而不会到达我的账户,我们都会感到不快。

事实上,银行交易比这更复杂;这是一个简单的例子。

许多应用程序需要多个SQL语句作为一个单元发生,对于这些,您总是需要事务。

各种行为意味着您必须检查文档。一些主要数据库(不是上面提到的三个)在各种事件(例如上一个事务的结束)或DDL语句(在某些情况下创建,删除,更改和截断)上启动新事务。如果您需要事务,并且大多数实际应用程序都需要,那么您必须检查您正在使用的数据库的文档,并进行大量的多用户测试。

有一个更长的解释here和您选择使用的数据库的数据库文档是权威来源。

© www.soinside.com 2019 - 2024. All rights reserved.