begin tran
成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),德令哈企業(yè)網(wǎng)站建設(shè),德令哈品牌網(wǎng)站建設(shè),網(wǎng)站定制,德令哈網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,德令哈網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
。。。。。。
在存儲(chǔ)過(guò)程后面加上:
if @@error0
rollback tran
else
commit tran
放在事務(wù)里面就可以回滾哦!
sqlserver_update_事務(wù)回滾
begin?tran
update?
if?@@rowCount?!=約定數(shù)
goto?err
commit?tran
return;
err:
rollback?tran
return;
請(qǐng)參閱!
如何啟動(dòng)Transaction; 共有三種方式
1.自動(dòng)transaction
每句statement都是一個(gè)transaction.例一個(gè)update指令更新多筆紀(jì)錄, 要就全部成功, 只要失敗,全部會(huì)回復(fù)原值.
2.ExplicitTransaction
以Begin Transaction開(kāi)始(開(kāi)啟)
3.ImplicitTransaction (建議不要用)
以Set Implicit_Transaction ON
如何結(jié)束Transaction; 共有三種方式
1. COMMIT Transaction(提交)
Transaction期間的任何修改,都會(huì)保證到數(shù)據(jù)庫(kù)中
2. ROLLBACK Transaction(回滾)
數(shù)據(jù)會(huì)回復(fù)Transaction前狀態(tài)
3. KILL SPID 強(qiáng)迫停止, 會(huì)rollback
事務(wù)(Transaction)是訪問(wèn)并可能更新數(shù)據(jù)庫(kù)中各種數(shù)據(jù)項(xiàng)的一個(gè)程序執(zhí)行單元(unit)。事務(wù)通常由高級(jí)數(shù)據(jù)庫(kù)操縱語(yǔ)言或編程語(yǔ)言(如SQL,C++或Java)書寫的用戶程序的執(zhí)行所引起,并用形如begin transaction和end transaction語(yǔ)句(或函數(shù)調(diào)用)來(lái)界定。事務(wù)由事務(wù)開(kāi)始(begin transaction)和事務(wù)結(jié)束(end transaction)之間執(zhí)行的全體操作組成。
當(dāng)一個(gè)事務(wù)的某一個(gè)操作發(fā)生問(wèn)題時(shí),整個(gè)事務(wù)可以回滾掉,就像沒(méi)有做任何操作一樣。這就是事務(wù)回滾。
如果一個(gè)事務(wù)的所有操作均成功,則就可以提交事務(wù),保證事務(wù)的完整性。
應(yīng)用程序主要通過(guò)指定事務(wù)啟動(dòng)和結(jié)束的時(shí)間來(lái)控制事務(wù)。
以MS SQL Server的Transac-SQL語(yǔ)言為例,
事務(wù)啟動(dòng):
BEGIN TRAN [ SACTION ] [ transaction_name | @tran_name_variable [ WITH MARK [ 'description' ] ] ]
結(jié)束事務(wù)
可以使用 COMMIT 或 ROLLBACK 語(yǔ)句結(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ā)生錯(cuò)誤或事務(wù)被取消, 回滾事務(wù) */
ROLLBACK TRAN T1
首先性能肯定受影響,因?yàn)橐聪蚧貪L操作。
以sqlserver為例,如果是插入操作,回滾期間鎖表,而且一般級(jí)別數(shù)據(jù)庫(kù)消耗時(shí)間接近1:3。如果插入進(jìn)行了1小時(shí)有可能要超過(guò)3小時(shí)多來(lái)完成回滾,此時(shí)不要強(qiáng)行關(guān)閉數(shù)據(jù)庫(kù)或者殺死進(jìn)程,也為無(wú)論如何為了保持acid特性也不會(huì)中止回滾只能等。
sqlserver 的編輯器一般都是默認(rèn)自動(dòng)提交,也就是說(shuō)你刪除后,就自動(dòng)提交了;不能回滾。
當(dāng)然如果你設(shè)置成不是默認(rèn)提交的話,那么你在提交之前可以回滾。
而如果是程序代碼中刪除的話,看你有沒(méi)有啟用事務(wù),如果沒(méi)有啟用事務(wù),那么一般也是默認(rèn)提交的,如果啟用事務(wù),那么再提交前可以回滾,如果已經(jīng)提交了,那么就回滾不了了。