在ADO.NET中使用事務(wù)保護(hù)你數(shù)據(jù)的完整性
Christa May 2004
小結(jié): 當(dāng)修改數(shù)據(jù)時,事務(wù)是維護(hù)數(shù)據(jù)完整性的一個關(guān)鍵特征. 縱覽一下事務(wù)及其重要性,接下來學(xué)習(xí)如何在你的應(yīng)用中使用事務(wù)保護(hù)數(shù)據(jù).
內(nèi)容
介紹
事務(wù)剖析
事務(wù)在ADO.Net中
實施事務(wù)
總結(jié)
介紹
大多數(shù)企業(yè)數(shù)據(jù)庫為了在數(shù)據(jù)修改時保證數(shù)據(jù)的完整性而提供了事務(wù)這樣一個特征. 維護(hù)數(shù)據(jù)的完整性目的是保證組織依賴數(shù)據(jù)的質(zhì)量; 畢竟, 當(dāng)你生成報表或進(jìn)行一些數(shù)據(jù)驅(qū)動的處理, 你希望知道你操作的數(shù)據(jù)是正確的.
一個成功的事務(wù)必須通過”ACID”測試, 它必須如此:
· 原子性 – 所有在事務(wù)中的表述或者執(zhí)行正確, 或者它們?nèi)炕貪L. 所有操作集合代表或完成或失敗, 而不會是剩下部分, 損壞你的數(shù)據(jù).
· 一致性 – 所有通過事務(wù)接觸的數(shù)據(jù)在邏輯上保持一致狀態(tài). 例如, 存貨數(shù)量在一個消耗的表中, 這兒有相關(guān)的訂單消費存貨. 因此存貨不能丟失.
· 孤立性 – 事務(wù)必須在沒有干擾別的并發(fā)事務(wù)時或被別的并發(fā)事務(wù)干擾的情況下影響數(shù). 這就阻止事務(wù)在沒有授權(quán)信息的情況下改變數(shù)據(jù). 大部分?jǐn)?shù)據(jù)庫使用上鎖保證事務(wù)的孤立性.
· 持久性 – 通過事務(wù)修改的數(shù)據(jù)是永久的, 并且會持續(xù)到系統(tǒng)失敗.
經(jīng)典的例子是提交訂單和訂單系統(tǒng) – 你已經(jīng)檢查了顧客的信譽等級, 創(chuàng)建了訂單記錄, 創(chuàng)建了訂單條目, 消費訂單條目從庫存中, 創(chuàng)建運輸請求, 等等. 如果這些步驟中的一步或多步失敗, 其余的將失敗, 你可以在一個孤立的,不可靠的庫存數(shù)量,或其它的記錄表格中結(jié)束數(shù)據(jù)的不一致性. 正確的使用事務(wù)阻止這種可能發(fā)生的情形. 這對于你們的DBA, 你們的公司, 和你的工作的安全性都有好處.
這就是說,記住在有必要的去使用事務(wù). 管理事務(wù)會增加系統(tǒng)的開銷. 使用事務(wù)也會增加系統(tǒng)中鎖(或其它獨立機制,依賴數(shù)據(jù)庫)的范圍, 會導(dǎo)致并發(fā)問題. 考慮這些情況封裝到事務(wù)當(dāng)中作為一個原子單元執(zhí)行, 考慮在執(zhí)行環(huán)境下產(chǎn)生的后果, 考慮部分完成時會發(fā)生什么.
事務(wù)可以使用各種原生數(shù)據(jù)庫的SQL變量在服務(wù)器端實施, , 也可以使用ado.net在應(yīng)用中調(diào)用. 本文章使用ado.net數(shù)據(jù)提供對象實施數(shù)據(jù)庫事務(wù). 我將以事務(wù)剖析為開始并且看它們是如何和你的數(shù)據(jù)庫交互的. 然后看一下.Net Framework 提供的類是如何幫助你在數(shù)據(jù)讀取代碼中實現(xiàn)和管理事務(wù)的, 已經(jīng)它們一些使用的通常場景.
|