為什么使用事務(wù)
當(dāng)對多個表進(jìn)行更新的時候,某條執(zhí)行失敗。為了保持?jǐn)?shù)據(jù)的完整性,需要使用事務(wù)回滾。
顯示設(shè)置事務(wù)
復(fù)制代碼 代碼如下:
begin try
begin transaction
insert into shiwu (asd) values ('aasdasda');
commit transaction
end try
begin catch
select ERROR_NUMBER() as errornumber
rollback transaction
end catch
隱式設(shè)置事務(wù)
復(fù)制代碼 代碼如下:
set implicit_transactions on; -- 啟動隱式事務(wù)
go
begin try
insert into shiwu (asd) values ('aasdasda');
insert into shiwu (asd) values ('aasdasda');
commit transaction;
end try
begin catch
select ERROR_NUMBER() as errornumber
rollback transaction; --回滾事務(wù)
end catch
set implicit_transactions off; --關(guān)閉隱式事務(wù)
go
顯示事務(wù)以下語句不能使用,隱式事務(wù)可以
復(fù)制代碼 代碼如下:
alter database;
backup;
create database;
drop database;
reconfigure;
restore;
update statistics;
顯示事務(wù)可以嵌套使用
復(fù)制代碼 代碼如下:
--創(chuàng)建存儲過程
create procedure qiantaoProc
@asd nchar(10)
as
begin
begin try
begin transaction innerTrans
save transaction savepoint --創(chuàng)建事務(wù)保存點(diǎn)
insert into shiwu (asd) values (@asd);
commit transaction innerTrans
end try
begin catch
rollback transaction savepoint --回滾到保存點(diǎn)
commit transaction innerTrans
end catch
end
go
begin transaction outrans
exec qiantaoProc 'asdasd';
rollback transaction outrans
事務(wù)嵌套,回滾外層事務(wù)時,如果嵌套內(nèi)的事務(wù)已經(jīng)回滾過則會有異常。此時需要使用事務(wù)保存點(diǎn)。如上代碼。
您可能感興趣的文章:- SQL server 管理事務(wù)和數(shù)據(jù)庫介紹
- MySQL InnoDB之事務(wù)與鎖詳解
- MySQL存儲過程例子(包含事務(wù),輸出參數(shù),嵌套調(diào)用)
- mysql的XA事務(wù)恢復(fù)過程詳解