SQL SERVERTRANSACTION
-
开启事务begintransaction transaction_name
标记一个显式本地事务的起始点。BEGINTRANSACTION使 @@TRANCOUNT按 1递增。
虽然 BEGIN TRANSACTION 启动一个本地事务,但是在应用程序接下来执行一个必须记录的操作(如执行 INSERT、UPDATE或 DELETE语句)之前,它并不被记录在事务日志中。应用程序能执行一些操作,例如为了保护 SELECT 语句的事务隔离级别而获取锁,但是直到应用程序执行一个修改操作后日志中才有记录。
-
提交事务committransaction transaction_name
当在嵌套事务中使用时,内部事务的提交并不释放资源或使其修改成为永久修改。只有在提交了外部事务时,数据修改才具有永久性,而且资源才会被释放。当 @@TRANCOUNT大于 1时,每发出一个 COMMIT TRANSACTION 命令只会使 @@TRANCOUNT按 1递减。当 @@TRANCOUNT最终递减为 0时,将提交整个外部事务。
因为transaction_name被数据库引擎忽略,所以当存在显著内部事务时,发出一个引用外部事务名称的 COMMIT TRANSACTION 只会使 @@TRANCOUNT按 1递减。
当 @@TRANCOUNT为 0时发出 COMMIT TRANSACTION将会导致出现错误;因为没有相应的 BEGIN TRANSACTION。
不能在发出一个 COMMITTRANSACTION语句之后回滚事务,因为数据修改已经成为数据库的一个永久部分。
仅当事务计数在语句开始处为 0 时,数据库引擎才会增加语句内的事务计数。
-
回滚事务rollbacktransaction transaction_name
将显式事务或隐性事务回滚到事务的起点或事务内的某个保存点。可以使用 ROLLBACK TRANSACTION清除自事务的起点或到某个保存点所做的所有数据修改。它还释放由事务控制的资源。
不带savepoint_name和transaction_name的 ROLLBACK TRANSACTION回滚到事务的起点。嵌套事务时,该语句将所有内层事务回滚到最外面的 BEGIN TRANSACTION 语句。在这两种情况下,ROLLBACK TRANSACTION 都将 @@TRANCOUNT系统函数减小为 0。ROLLBACK TRANSACTIONsavepoint_name不减小 @@TRANCOUNT。
保存点提供一种机制可以只回滚事务的一部分操作。用户可以在一个事务中设置保存点或标记点。保存点定义了一个在事务的部分操作在某个条件下被取消时,事务可以回滚到的位置。SQL Server允许你通过SAVE TRAN语句设定保存点,使用SAVETRAN不会影响@@TRANCOUNT的值。同样的,回滚保存点(而不是回滚事务)的操作也不会影响@@TRANCOUNT的值。然而,这个回滚操作必须显示的指定这个保存点:使用不带指定保存点名称的ROLLBACK TRAN语句总是回滚整个事务。
4.事务数目@@TRANCOUNT
返回在当前连接上执行的 BEGIN TRANSACTION 语句的数目。
BEGINTRANSACTION语句将 @@TRANCOUNT增加 1。 ROLLBACKTRANSACTION将 @@TRANCOUNT递减到 0,但 ROLLBACK TRANSACTION savepoint_name除外,它不影响 @@TRANCOUNT。 COMMIT TRANSACTION 或 COMMIT WORK将 @@TRANCOUNT递减 1。