蔡義忠,熊發(fā)涯
(黃岡職業(yè)技術(shù)學(xué)院,湖北黃岡 438002)
筆者在開發(fā)一個“說課比賽網(wǎng)絡(luò)評分系統(tǒng)”的時候,遇到一個需要對多個數(shù)據(jù)庫表同時操作的情況,如果用普通的做法,順序?qū)Ω鱾€數(shù)據(jù)庫表進(jìn)行操作,就可能會在極端情況下,出現(xiàn)操作一部分的數(shù)據(jù)庫表的情況下操作被中斷。這樣導(dǎo)致數(shù)據(jù)庫中的信息出現(xiàn)不一致,甚至出現(xiàn)“臟數(shù)據(jù)”。從而影響軟件系統(tǒng)的穩(wěn)定運(yùn)行。如果使用事務(wù)來處理對多個數(shù)據(jù)庫表的操作就可以避免這樣極端情況下的錯誤產(chǎn)生。
事務(wù)是對數(shù)據(jù)庫執(zhí)行的一個操作單位。它是以邏輯順序完成的工作單元或工作序列,無論是用戶手工操作,還是由程序進(jìn)行的自動操作。
一個事務(wù)可以是一個或多個DML語句。在管理事務(wù)時,任何指定的事務(wù)都必須作為一個整體來完成,否則其中任何一條語句都不會完成[1]。下面是事務(wù)的基本特征:
1)所有的事務(wù)都有開始和結(jié)束。例如,在SQL Server中事務(wù)用BEGIN TRANSACTION開始。
2)事務(wù)可以被保存或撤消。例如,在SQL Server中撤消事務(wù)的方法用ROLLBACK TRANSACTION。提交事務(wù)用COMMIT TRANSACTION。通常撤消或保存事務(wù)是放在一個條件判斷語句中來執(zhí)行的。
3)如果事務(wù)在中途失敗,事務(wù)中的任何部分都不會被記錄到數(shù)據(jù)庫中。這樣可以很好的保證數(shù)據(jù)的完整性。
注意:事務(wù)控制命令只與DML命令I(lǐng)NSERT、UPDATE和DELETE配合使用,比如我們不會創(chuàng)建表之后使用COMMIT語句,因為當(dāng)表被創(chuàng)建之后,它會自動被提交給數(shù)據(jù)庫。類似地,不能使用ROLLBACK語句來恢復(fù)被撤消的表。
當(dāng)事務(wù)完成之后,事務(wù)信息被保存在數(shù)據(jù)庫里的指定區(qū)域或臨時回退區(qū)域。所有的修改都被保存到這個臨時回退區(qū)域。直到事務(wù)控制命令出現(xiàn)。當(dāng)事務(wù)控制命令出現(xiàn)時,所做的修改要么被保存到數(shù)據(jù)庫中,要么被放棄,然后臨時回退區(qū)域被清空。
下面,筆者以具體的應(yīng)用實例來進(jìn)一步解釋事務(wù)的使用方法。在筆者最近開發(fā)的“說課比賽網(wǎng)絡(luò)評分系統(tǒng)”中有這么一個業(yè)務(wù)需求。要求一個院校最多只能報4門課程參加湖北省高職高專院校說課比賽。那么,在數(shù)據(jù)庫系統(tǒng)中,增加一個院校表信息的同時,就得在用戶表和課程表中同時增加四條記錄信息。并且一個新增的參賽教師信息對應(yīng)一個新增的參賽課程信息。這個功能對應(yīng)的界面如圖1所示。
圖1 通過事務(wù)增加院校的界面
這個功能需求,用存儲過程及事務(wù)來實現(xiàn),具體代碼如下:
注意:SQL Server的注釋是用“--”開頭,讀者可以通過看注釋來理解事務(wù)的實現(xiàn)方法。
事務(wù)處理在數(shù)據(jù)庫應(yīng)用中極為重要,是保證數(shù)據(jù)庫應(yīng)用系統(tǒng)安全穩(wěn)定運(yùn)行的重要手段。本文中的小案例中的判斷事務(wù)執(zhí)行的成功還是失敗是通過記錄每個操作語句執(zhí)行后返回的系統(tǒng)錯誤號@@ERROR來判斷,只要有一次出現(xiàn)@@ERROR返回值不是0,則最終的@ERROR變量就不能為0,也就可以判斷事務(wù)是否失敗。注意區(qū)別,@ERROR是定義的變量,@@ERROR是系統(tǒng)返回的錯誤編號,執(zhí)行正常時@@ERROR返回為0,執(zhí)行不正常@@ERROR返回為非0。
[1]什么是SQL中的事務(wù)以及控制事務(wù)概述[EB/OL].http://www.gootry.com/java-base/article/100612222328/153,2010-06-12.
[2]高文.面向素質(zhì)教育、基于信息技術(shù)的課程與教學(xué)改革[J]. 上海教育,2001,(4).
[3]賴一飛,魏敏杰.面向新世紀(jì)的統(tǒng)計學(xué)教學(xué)改革[J].科技進(jìn)步與對策,2001,(6).