假设我使用的是标准的sql引擎(例如postgres、mysql……)。
如果我在进行查询时没有明确地说“begin transaction”和“end transaction”
(比如“插入学生…”),
安全吗?
我是否丢失了rdbms实现的“acid”属性?如果有很多请求,我的申请会不一致吗?
rdbms是否仅在我使用事务时才保证acid?
我在应用程序代码中所做的每一个write查询都必须是一个事务才能在应用程序中使用acid属性吗?
假设我使用的是标准的sql引擎(例如postgres、mysql……)。
如果我在进行查询时没有明确地说“begin transaction”和“end transaction”
(比如“插入学生…”),
安全吗?
我是否丢失了rdbms实现的“acid”属性?如果有很多请求,我的申请会不一致吗?
rdbms是否仅在我使用事务时才保证acid?
我在应用程序代码中所做的每一个write查询都必须是一个事务才能在应用程序中使用acid属性吗?
1条答案
按热度按时间gstyhher1#
您所询问的行为因数据库而异。
对于postgresql和microsoft sql server,如果不使用“开始事务…”结束事务”则每个语句都被视为一个事务。这种行为通常被描述为“自动提交”,您可以在mysql中将其作为一个选项打开。
事务应该根据应用程序的需要来定义。典型的情况是,如果你从我这里买东西,那么钱必须离开你的账户,作为一笔交易到达我的账户。要么两个动作都成功,要么都失败。所以在这种情况下,即使使用自动提交,也必须将“begin transaction”结束交易“围绕两个报表,否则钱可能离开你的帐户,而不是到达我的,我们都会不高兴。
事实上,银行交易比这更复杂;这是一个简单的例子。
许多应用程序需要多个sql语句作为一个单元来执行,对于这些语句,您总是需要事务。
行为的多样性意味着你必须检查文件。一些主要的数据库(不是上面提到的三个)在各种事件上启动一个新的事务,比如前一个事务的结束,或者ddl语句(在某些情况下是create、drop、alter和truncate)。如果您需要事务,而且大多数实际应用程序都需要事务,那么您必须检查所使用数据库的文档,并进行大量的多用户测试。
这里有一个较长的解释,您选择使用的数据库的数据库文档是权威的来源。