SQL回滚事务

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL回滚事务相关的知识,希望对你有一定的参考价值。

我正在尝试删除表格中的数据

BEGIN TRAN 

DELETE FROM TABLEA
DELETE FROM TABLEB

ROLLBACK TRAN 

但是当我检查表中的数据时,数据确实存在。

答案

如果要回滚事务,则取消未提交的更改。如果您打开事务,删除和回滚,则数据将存在。

如果要提交事务(删除信息),则执行

BEGIN TRAN 

DELETE FROM TABLEA
DELETE FROM TABLEB

COMMIT TRAN 
另一答案

以下是有关SQL Server中TRANSACTION的一些解释

交易是一个单一的工作单位。如果事务成功,则在事务期间进行的所有数据修改都将被提交并成为数据库的永久部分。如果事务遇到错误并且必须取消或回滚,则所有数据修改都将被删除。

另外请记住,使用TRANSACTION暂时锁定表,所以你必须小心。

 BEGIN TRAN 
    Statement1
    Statement2
 COMMIT TRAN

如果其中一个声明失败或有一些错误,transactionrollback并忽略所有声明,并且将不会有任何更改

当你使用ROLLBACK TRAN时,它会删除从transaction开始使用COMMIT TRAN所做的所有数据修改

另一答案

更换

ROLLBACK TRAN 

COMMIT TRAN 

并且数据将被删除。 rollback tran表示取消交易中的所有更改。

另一答案

- 作为总结

BEGIN TRAN 

DELETE FROM TABLEA
DELETE FROM TABLEB

ROLLBACK/COMMIT TRAN

--ROLLBACK:在名称回滚中,它将取消该进程。

--COMMIT:在提交名称中,它将确认该过程。

另一答案
BEGIN TRY
BEGIN TRAN   

DELETE FROM TABLEA 

DELETE FROM TABLEB  

COMMIT TRAN  
END TRY

BEGIN CATCH
 SELECT 
        ERROR_NUMBER() AS ErrorNumber
        ,ERROR_SEVERITY() AS ErrorSeverity
        ,ERROR_STATE() AS ErrorState
        ,ERROR_PROCEDURE() AS ErrorProcedure
        ,ERROR_LINE() AS ErrorLine
        ,ERROR_MESSAGE() AS ErrorMessage

 IF @@TRANCOUNT > 0
        ROLLBACK TRANSACTION
END CATCH

如果事务中有多个操作,则应始终使用try-catch块来回滚事务的一部分,这是事务失败的一部分。

以上是关于SQL回滚事务的主要内容,如果未能解决你的问题,请参考以下文章

如果sql事务中出现问题,则回滚并通知

SQL回滚事务

JDBC事务提交/回滚实例

事务 回滚

SQL Server事务执行一半出错是否自动回滚整个事务

ROLLBACK语句只能针对未提交的事务进行回滚操作,已提交的事务是不能回滚的?