在SQL回滚事务中,从哪里回滚状态?

问题描述 投票:0回答:2

在SQL回滚事务中,从哪里回滚状态?我的意思是存储数据的位置,以便回滚可以将其恢复。

sql rollback
2个回答
0
投票

对于Oracle,它将保存重做日志中的更改,直到提交为止。每个RDMS都有自己的策略。


0
投票

您可以使用安全简便的代码运行100%(运行所有查询行)或不运行任何关闭它们

|查询1 | =喜欢插入或选择或... |行数| =数字关闭查询

    DECLARE @rowcount int  set @rowcount = 0 ; 
    BEGIN TRANSACTION [Tran1]
    BEGIN TRY 
     <Query 1> ; set @rowcount = (@rowcount + @@ROWCOUNT); 
     <Query 2> ; set @rowcount = (@rowcount + @@ROWCOUNT); 
    ...
    IF @rowcount =  <count of lines>
      COMMIT TRANSACTION[Tran1]
    ELSE
      ROLLBACK TRANSACTION[Tran1]
    END TRY
      BEGIN CATCH
      ROLLBACK TRANSACTION[Tran1]
    END CATCH

例如,这段代码运行2插入行查询,但或运行所有他或没有运行任何东西和ROLLBACK

DECLARE @rowcount int  set @rowcount = 0 ; 
    BEGIN TRANSACTION [Tran1]
    BEGIN TRY 
     insert into [database].[dbo].[tbl1] (fld1) values('1') ;
        set @rowcount = (@rowcount + @@ROWCOUNT); 
     insert into [database].[dbo].[tbl2] (fld1) values('2') ;
        set @rowcount = (@rowcount + @@ROWCOUNT); 

    IF @rowcount =  2
      COMMIT TRANSACTION[Tran1]
    ELSE
      ROLLBACK TRANSACTION[Tran1]
    END TRY
      BEGIN CATCH
      ROLLBACK TRANSACTION[Tran1]
    END CATCH
© www.soinside.com 2019 - 2024. All rights reserved.