首先性能肯定受影響,因?yàn)橐聪蚧貪L操作。
創(chuàng)新互聯(lián)公司是一家專業(yè)提供綦江企業(yè)網(wǎng)站建設(shè),專注與成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)、H5高端網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為綦江眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。
以sqlserver為例,如果是插入操作,回滾期間鎖表,而且一般級(jí)別數(shù)據(jù)庫消耗時(shí)間接近1:3。如果插入進(jìn)行了1小時(shí)有可能要超過3小時(shí)多來完成回滾,此時(shí)不要強(qiáng)行關(guān)閉數(shù)據(jù)庫或者殺死進(jìn)程,也為無論如何為了保持acid特性也不會(huì)中止回滾只能等。
如何啟動(dòng)Transaction; 共有三種方式
1.自動(dòng)transaction
每句statement都是一個(gè)transaction.例一個(gè)update指令更新多筆紀(jì)錄, 要就全部成功, 只要失敗,全部會(huì)回復(fù)原值.
2.ExplicitTransaction
以Begin Transaction開始(開啟)
3.ImplicitTransaction (建議不要用)
以Set Implicit_Transaction ON
如何結(jié)束Transaction; 共有三種方式
1. COMMIT Transaction(提交)
Transaction期間的任何修改,都會(huì)保證到數(shù)據(jù)庫中
2. ROLLBACK Transaction(回滾)
數(shù)據(jù)會(huì)回復(fù)Transaction前狀態(tài)
3. KILL SPID 強(qiáng)迫停止, 會(huì)rollback
sqlserver 的編輯器一般都是默認(rèn)自動(dòng)提交,也就是說你刪除后,就自動(dòng)提交了;不能回滾。
當(dāng)然如果你設(shè)置成不是默認(rèn)提交的話,那么你在提交之前可以回滾。
而如果是程序代碼中刪除的話,看你有沒有啟用事務(wù),如果沒有啟用事務(wù),那么一般也是默認(rèn)提交的,如果啟用事務(wù),那么再提交前可以回滾,如果已經(jīng)提交了,那么就回滾不了了。
begin tran
。。。。。。
在存儲(chǔ)過程后面加上:
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)參閱!
事務(wù)(Transaction)是訪問并可能更新數(shù)據(jù)庫中各種數(shù)據(jù)項(xiàng)的一個(gè)程序執(zhí)行單元(unit)。事務(wù)通常由高級(jí)數(shù)據(jù)庫操縱語言或編程語言(如SQL,C++或Java)書寫的用戶程序的執(zhí)行所引起,并用形如begin transaction和end transaction語句(或函數(shù)調(diào)用)來界定。事務(wù)由事務(wù)開始(begin transaction)和事務(wù)結(jié)束(end transaction)之間執(zhí)行的全體操作組成。
當(dāng)一個(gè)事務(wù)的某一個(gè)操作發(fā)生問題時(shí),整個(gè)事務(wù)可以回滾掉,就像沒有做任何操作一樣。這就是事務(wù)回滾。
如果一個(gè)事務(wù)的所有操作均成功,則就可以提交事務(wù),保證事務(wù)的完整性。
應(yīng)用程序主要通過指定事務(wù)啟動(dòng)和結(jié)束的時(shí)間來控制事務(wù)。
以MS SQL Server的Transac-SQL語言為例,
事務(wù)啟動(dòng):
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ā)生錯(cuò)誤或事務(wù)被取消, 回滾事務(wù) */
ROLLBACK TRAN T1