在SQL回滚事务中,从哪里回滚状态?我的意思是存储数据的位置,以便回滚可以将其恢复。
答案 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;
例如这个代码运行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
&#13;