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

时间:2016-04-04 20:22:15

标签: sql rollback

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

2 个答案:

答案 0 :(得分:0)

对于Oracle,它会在提交之前保存重做日志中的更改。每个RDMS都有自己的战略。

答案 1 :(得分: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
&#13;
&#13;
&#13;

例如这个代码运行2插入行查询但是或者运行他或者没有运行任何东西和ROLLBACK

&#13;
&#13;
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
&#13;
&#13;
&#13;