【问题标题】:When do I have to commit?我什么时候必须承诺?
【发布时间】:2013-10-23 06:33:27
【问题描述】:

我听说在 SQL 中我不必提交每个语句。也许创造我不必。 那么您能回答我必须提交哪些声明吗? 我读到,我必须提交所有事务,但我不知道这是什么,也无法在任何地方找到它。

感谢您的帮助。

【问题讨论】:

  • 答案取决于您忽略指定的数据库引擎。

标签: sql transactions commit


【解决方案1】:

根据 SQL 标准,大多数需要事务的语句都会自动打开一个。

如果语句成功完成,某些数据库引擎(例如 SQL Server)将(默认情况下)自动提交事务。见Autocommit Transactions

自动提交模式是 SQL Server 数据库引擎的默认事务管理模式。每个 Transact-SQL 语句在完成时都会提交或回滚

SQL Server 也有一个Implicit Conversions 模式,该模式将使事务保持打开状态,直到它被显式提交。

在第二种这样的模式下运行时(我相信这是 Oracle 的默认模式),或者如果您明确创建了一个事务,那么作为开发人员,您可以何时提交交易。应该是在您完成对数据库的“完整”操作集之后。

【讨论】:

  • 谢谢,这就是我想知道的:)
【解决方案2】:

如果您BEGIN 进行交易,那么您必须ROLLBACKCOMMIT

例子:

BEGIN TRAN
    --Your code 
    INSERT INTO
    NewTable
    SELECT *
    FROM TABLE
COMMIT TRAN

如果你不使用它,它会在执行时提交。所以跟随要么失败要么被提交:

INSERT INTO
NewTable
SELECT *
FROM Table

如果出现错误(例如数据库中没有 NewTable),执行将引发错误并且事务将回滚。如果没有错误,事务将被提交。

【讨论】:

  • 谢谢,但是当我只做一个没有这个开始的插入时。那我也必须这样做吗?
猜你喜欢
  • 1970-01-01
  • 2016-01-27
  • 2014-11-08
  • 2013-01-28
  • 2011-03-18
  • 2012-04-26
  • 1970-01-01
  • 2013-04-30
相关资源
最近更新 更多