【发布时间】:2013-10-23 06:33:27
【问题描述】:
我听说在 SQL 中我不必提交每个语句。也许创造我不必。 那么您能回答我必须提交哪些声明吗? 我读到,我必须提交所有事务,但我不知道这是什么,也无法在任何地方找到它。
感谢您的帮助。
【问题讨论】:
-
答案取决于您忽略指定的数据库引擎。
标签: sql transactions commit
我听说在 SQL 中我不必提交每个语句。也许创造我不必。 那么您能回答我必须提交哪些声明吗? 我读到,我必须提交所有事务,但我不知道这是什么,也无法在任何地方找到它。
感谢您的帮助。
【问题讨论】:
标签: sql transactions commit
根据 SQL 标准,大多数需要事务的语句都会自动打开一个。
如果语句成功完成,某些数据库引擎(例如 SQL Server)将(默认情况下)自动提交事务。见Autocommit Transactions。
自动提交模式是 SQL Server 数据库引擎的默认事务管理模式。每个 Transact-SQL 语句在完成时都会提交或回滚
SQL Server 也有一个Implicit Conversions 模式,该模式将使事务保持打开状态,直到它被显式提交。
在第二种这样的模式下运行时(我相信这是 Oracle 的默认模式),或者如果您明确创建了一个事务,那么作为开发人员,您可以何时提交交易。应该是在您完成对数据库的“完整”操作集之后。
【讨论】:
如果您BEGIN 进行交易,那么您必须ROLLBACK 或COMMIT
例子:
BEGIN TRAN
--Your code
INSERT INTO
NewTable
SELECT *
FROM TABLE
COMMIT TRAN
如果你不使用它,它会在执行时提交。所以跟随要么失败要么被提交:
INSERT INTO
NewTable
SELECT *
FROM Table
如果出现错误(例如数据库中没有 NewTable),执行将引发错误并且事务将回滚。如果没有错误,事务将被提交。
【讨论】: