如何啟動Transaction; 共有三種方式
為察布查爾錫伯等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及察布查爾錫伯網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站設(shè)計制作、成都網(wǎng)站建設(shè)、察布查爾錫伯網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
1.自動transaction
每句statement都是一個transaction.例一個update指令更新多筆紀(jì)錄, 要就全部成功, 只要失敗,全部會回復(fù)原值.
2.ExplicitTransaction
以Begin Transaction開始(開啟)
3.ImplicitTransaction (建議不要用)
以Set Implicit_Transaction ON
如何結(jié)束Transaction; 共有三種方式
1. COMMIT Transaction(提交)
Transaction期間的任何修改,都會保證到數(shù)據(jù)庫中
2. ROLLBACK Transaction(回滾)
數(shù)據(jù)會回復(fù)Transaction前狀態(tài)
3. KILL SPID 強迫停止, 會rollback
放在事務(wù)里面就可以回滾哦!
sqlserver_update_事務(wù)回滾
begin?tran
update?
if?@@rowCount?!=約定數(shù)
goto?err
commit?tran
return;
err:
rollback?tran
return;
請參閱!
sqlserver 的編輯器一般都是默認(rèn)自動提交,也就是說你刪除后,就自動提交了;不能回滾。
當(dāng)然如果你設(shè)置成不是默認(rèn)提交的話,那么你在提交之前可以回滾。
而如果是程序代碼中刪除的話,看你有沒有啟用事務(wù),如果沒有啟用事務(wù),那么一般也是默認(rèn)提交的,如果啟用事務(wù),那么再提交前可以回滾,如果已經(jīng)提交了,那么就回滾不了了。
事務(wù)(Transaction)是訪問并可能更新數(shù)據(jù)庫中各種數(shù)據(jù)項的一個程序執(zhí)行單元(unit)。事務(wù)通常由高級數(shù)據(jù)庫操縱語言或編程語言(如SQL,C++或Java)書寫的用戶程序的執(zhí)行所引起,并用形如begin transaction和end transaction語句(或函數(shù)調(diào)用)來界定。事務(wù)由事務(wù)開始(begin transaction)和事務(wù)結(jié)束(end transaction)之間執(zhí)行的全體操作組成。
當(dāng)一個事務(wù)的某一個操作發(fā)生問題時,整個事務(wù)可以回滾掉,就像沒有做任何操作一樣。這就是事務(wù)回滾。
如果一個事務(wù)的所有操作均成功,則就可以提交事務(wù),保證事務(wù)的完整性。
應(yīng)用程序主要通過指定事務(wù)啟動和結(jié)束的時間來控制事務(wù)。
以MS SQL Server的Transac-SQL語言為例,
事務(wù)啟動:
BEGIN TRAN [ SACTION ] [ transaction_name | @tran_name_variable [ WITH MARK [ 'description' ] ] ]
結(jié)束事務(wù)
可以使用 COMMIT 或 ROLLBACK 語句結(jié)束事務(wù)。
1 事務(wù)的提交
BEGIN TRANSACTION T1
INSERT tabel1 ...
UPDATE table2 ...
...
/* 當(dāng)所有成功操作完成,提交事務(wù) */
COMMIT TRAN T1
2 事務(wù)的回滾
BEGIN TRANSACTION T1
INSERT tabel1 ...
...
/* 當(dāng)發(fā)生錯誤或事務(wù)被取消, 回滾事務(wù) */
ROLLBACK TRAN T1