摘要:事務(wù)是數(shù)據(jù)庫(kù)相關(guān)課程的一個(gè)重要知識(shí)點(diǎn)。針對(duì)目前教學(xué)中普遍存在的問題,結(jié)合案例詳細(xì)介紹幾種數(shù)據(jù)庫(kù)事務(wù)的常見實(shí)現(xiàn)方案,給出不同方案的綜合評(píng)價(jià)和應(yīng)用建議。實(shí)際教學(xué)效果證明了教學(xué)方法的有效性。
關(guān)鍵詞:數(shù)據(jù)庫(kù);事務(wù);實(shí)踐
數(shù)據(jù)庫(kù)原理及應(yīng)用是計(jì)算機(jī)專業(yè)的核心專業(yè)課程,該類課程系統(tǒng)、完整地講述了當(dāng)前數(shù)據(jù)庫(kù)技術(shù)的基本原理,并結(jié)合具體的數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)和應(yīng)用程序集成開發(fā)環(huán)境(IDE)介紹原理的應(yīng)用過程。課程的教學(xué)目的是讓學(xué)生對(duì)數(shù)據(jù)庫(kù)系統(tǒng)的基本概念和原理有較全面的了解,同時(shí)具備使用數(shù)據(jù)庫(kù)管理系統(tǒng)軟件和開發(fā)數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的能力。
事務(wù)處理是在數(shù)據(jù)處理時(shí)經(jīng)常遇到的。通常情況下,對(duì)于一個(gè)數(shù)據(jù)庫(kù)驅(qū)動(dòng)的應(yīng)用系統(tǒng),其數(shù)據(jù)庫(kù)部分通常包含多個(gè)數(shù)據(jù)表,表之間的關(guān)系支撐著整個(gè)系統(tǒng)的數(shù)據(jù)邏輯結(jié)構(gòu),在系統(tǒng)設(shè)計(jì)時(shí)必須考慮數(shù)據(jù)庫(kù)完整性問題,一般采用事務(wù)實(shí)現(xiàn)。根據(jù)實(shí)際情況選擇合適的事務(wù)實(shí)現(xiàn)方案是在實(shí)際應(yīng)用開發(fā)中的一項(xiàng)重要工作,要求開發(fā)者既要具有廣泛而深入的數(shù)據(jù)庫(kù)原理和系統(tǒng)實(shí)現(xiàn)知識(shí),又要有扎實(shí)的應(yīng)用設(shè)計(jì)能力,熟悉操作系統(tǒng)和有關(guān)軟硬件環(huán)境。目前,雖然有一些數(shù)據(jù)庫(kù)教材[1-2]及相關(guān)研究文獻(xiàn)[3-4]涉及到事務(wù)處理,但是,存在的普遍問題是沒有明確地從實(shí)際應(yīng)用中討論事務(wù)及其實(shí)現(xiàn)方案,缺乏綜合分析和應(yīng)用指導(dǎo),不利于學(xué)生實(shí)踐能力的提高。
筆者結(jié)合多年數(shù)據(jù)庫(kù)相關(guān)課程教學(xué)實(shí)踐和項(xiàng)目開發(fā)經(jīng)驗(yàn),以SQL Server和.NET平臺(tái)為例說明事務(wù)實(shí)現(xiàn)的教學(xué)方法。首先給出基本概念和案例,然后介紹不同的事務(wù)實(shí)現(xiàn)方案,并進(jìn)行綜合分析,最后給出實(shí)踐中事務(wù)實(shí)現(xiàn)的方案選擇建議。
1概念及案例
1.1基本概念
所謂事務(wù)[1]是用戶定義的一個(gè)數(shù)據(jù)庫(kù)操作序列,這些操作要么全做要么全不做,是一個(gè)不可分割的工作單位。事務(wù)具有原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)和持久性(Durability),簡(jiǎn)稱ACID特性。
根據(jù)提交方式的不同,事務(wù)分為隱式事務(wù)和顯示事務(wù)。其中隱式事務(wù)由系統(tǒng)提交,又稱自動(dòng)提交事務(wù);顯示事務(wù)由用戶編程提交。
1.2案例說明
為方便起見,本文使用經(jīng)典的銀行轉(zhuǎn)賬案例來介紹,即在A賬戶向B賬戶轉(zhuǎn)賬(金額為m)時(shí),首先在事務(wù)開始時(shí)判斷A賬戶余額是否滿足要求,如果滿足要求,則從A賬戶余額中扣除m,同時(shí)給B賬戶余額增加m;否則,回滾事務(wù)。同時(shí)假定A賬戶與B賬戶屬于同一銀行。相關(guān)表結(jié)構(gòu)如表1和表2所示。
2數(shù)據(jù)庫(kù)事務(wù)常見實(shí)現(xiàn)方案
根據(jù)創(chuàng)建和管理事務(wù)的不同方式,數(shù)據(jù)庫(kù)事務(wù)分為SQL事務(wù)和.NET事務(wù)兩種[5]。
2.1SQL事務(wù)
SQL事務(wù)是指使用SQL代碼創(chuàng)建和管理的事務(wù),運(yùn)行在存儲(chǔ)過程和觸發(fā)器等數(shù)據(jù)庫(kù)對(duì)象中,該方案將事務(wù)處理的任務(wù)交給SQL Server服務(wù)器完成。
1) 存儲(chǔ)過程方式。
由于具有效率高、減少網(wǎng)絡(luò)流量等多方面優(yōu)點(diǎn),存儲(chǔ)過程在工程項(xiàng)目中被廣泛使用。在存儲(chǔ)過程中實(shí)現(xiàn)事務(wù)時(shí),必須以begin transaction命令開始,并以commit或rollback命令結(jié)束。例如,轉(zhuǎn)賬存儲(chǔ)過程設(shè)計(jì)如下:
create procedure sp_TransAcnt
@FromAIDchar(