監(jiān)理公司管理系統(tǒng) | 工程企業(yè)管理系統(tǒng) | OA系統(tǒng) | ERP系統(tǒng) | 造價咨詢管理系統(tǒng) | 工程設(shè)計管理系統(tǒng) | 簽約案例 | 購買價格 | 在線試用 | 手機APP | 產(chǎn)品資料
X 關(guān)閉

數(shù)據(jù)庫中的事務(wù)處理概念及其應(yīng)用

申請免費試用、咨詢電話:400-8352-114

文章來源:泛普軟件

一 什么是事務(wù)

事務(wù)是由相關(guān)操作構(gòu)成的一個完整的操作單元。兩次連續(xù)成功的COMMIT或ROLLBACK之間的操作,稱為一個事務(wù)。在一個事務(wù)內(nèi),數(shù)據(jù)的修改一起提交或撤銷,如果發(fā)生故障或系統(tǒng)錯誤,整個事務(wù)也會自動撤銷。

比如,我們?nèi)ャy行轉(zhuǎn)賬,操作可以分為下面兩個環(huán)節(jié):

(1) 從第一個賬戶劃出款項。

(2) 將款項存入第二個賬戶。

在這個過程中,兩個環(huán)節(jié)是關(guān)聯(lián)的。第一個賬戶劃出款項必須保證正確的存入第二個賬戶,如果第二個環(huán)節(jié)沒有完成,整個的過程都應(yīng)該取消,否則就會發(fā)生丟失款項的問題。整個交易過程,可以看作是一個事物,成功則全部成功,失敗則需要全部撤消,這樣可以避免當(dāng)操作的中間環(huán)節(jié)出現(xiàn)問題時,產(chǎn)生數(shù)據(jù)不一致的問題。

一個事務(wù)是由一個可執(zhí)行的SQL語句開始,一個可執(zhí)行SQL語句產(chǎn)生對實例的調(diào)用。在事務(wù)開始時,被賦給一個可用回滾段,記錄該事務(wù)的回滾項。一個事務(wù)以下列任何一個出現(xiàn)而結(jié)束。數(shù)據(jù)庫事務(wù)是一個邏輯上的劃分,有的時候并不是很明顯,它可以是一個操作步驟,也可以是多個操作步驟。

我們可以這樣理解數(shù)據(jù)庫事物:對數(shù)據(jù)庫所做的一系列修改,在修改過程中,暫時不寫入數(shù)據(jù)庫,而是緩存起來,用戶在自己的終端可以預(yù)覽變化,直到全部修改完成,并經(jīng)過檢查確認無誤后,一次性提交并寫入數(shù)據(jù)庫,在提交之前,必要的話所做的修改都可以取消。提交之后,就不能撤銷,提交成功后其他用戶才可以通過查詢?yōu)g覽數(shù)據(jù)的變化。

以事務(wù)的方式對數(shù)據(jù)庫進行訪問,有如下的優(yōu)點:

* 把邏輯相關(guān)的操作分成了一個組。

* 在數(shù)據(jù)永久改變前,可以預(yù)覽數(shù)據(jù)變化。

* 能夠保證數(shù)據(jù)的讀一致性。

二 數(shù)據(jù)庫事務(wù)的應(yīng)用

數(shù)據(jù)庫事務(wù)處理可分為隱式和顯式兩種。顯式事務(wù)操作通過命令實現(xiàn),隱式事務(wù)由系統(tǒng)自動完成提交或撤銷(回退)工作,無需用戶的干預(yù)。

隱式提交的情況包括:當(dāng)用戶正常退出SQL*Plus或執(zhí)行CREATE、DROP、GRANT、REVOKE等命令時會發(fā)生事務(wù)的自動提交。

還有一種情況,如果把系統(tǒng)的環(huán)境變量AUTOCOMMIT設(shè)置為ON(默認狀態(tài)為OFF),則每當(dāng)執(zhí)行一條INSERT、DELETE或UPDATE命令對數(shù)據(jù)進行修改后,就會馬上自動提交。設(shè)置命令格式如下:

SET AUTOCOMMIT ON/OFF

隱式回退的情況包括:當(dāng)異常結(jié)束SQL*Plus或系統(tǒng)故障發(fā)生時,會發(fā)生事務(wù)的自動回退。

顯式事務(wù)處理的數(shù)據(jù)庫事務(wù)操作語句有3條,分別是COMMIT,ROLLBACK,SAVEPOINT語句。

COMMIT是數(shù)據(jù)庫事物提交,將變化寫入數(shù)據(jù)庫。此操作把多個步驟對數(shù)據(jù)庫的修改,一次性地永久寫入數(shù)據(jù)庫,代表數(shù)據(jù)庫事務(wù)的成功執(zhí)行。ROLLBACK是數(shù)據(jù)庫事務(wù)回退,撤銷對數(shù)據(jù)庫的修改。操作在發(fā)生問題時,把對數(shù)據(jù)庫已經(jīng)作出的修改撤消,回退到修改前的狀態(tài)。在操作過程中,一旦發(fā)生問題,如果還沒有提交操作,則隨時可以使用ROLLBACK來撤消前面的操作。SAVEPOINT則用于在事務(wù)中間建立一些保存點,ROLLBACK可以使操作回退到這些點撤上邊,而不必撤銷全部的操作。一旦COMMIT完成,就不能用ROLLBACK來取消已經(jīng)提交的操作。一旦ROLLBACK完成,被撤消的操作要重做,必須重新執(zhí)行相關(guān)操作語句。

如何開始一個新的事務(wù)呢?一般情況下,開始一個會話(即連接數(shù)據(jù)庫),執(zhí)行第一條SQL語句將開始一個新的事務(wù),或執(zhí)行COMMIT提交或ROLLBACK撤銷事務(wù),也標(biāo)志新的事務(wù)的開始。另外,執(zhí)行DDL(如CREATE)或DCL命令也將自動提交前一個事務(wù)而開始一個新的事務(wù)。

數(shù)據(jù)在修改的時候會對記錄進行鎖定,其他會話不能對鎖定的記錄進行修改或加鎖,只有當(dāng)前會話提交或撤銷后,記錄的鎖定才會釋放。

例如修改雇員SCOTT的工資,工資在原有基礎(chǔ)上增加1000:

UPDATE emp SET sal=sal+1000 WHERE empno=7788;

執(zhí)行結(jié)果:

已更新 1 行。

顯示修改后SCOTT的工資:

SELECT ename,sal FROM emp WHERE empno=7788;

執(zhí)行結(jié)果:

ENAME SAL

SCOTT 4000

經(jīng)查看修改結(jié)果正確,提交所做的修改:

COMMIT;

執(zhí)行結(jié)果:

提交完成。

在執(zhí)行COMMIT后,工資的修改被永久寫入數(shù)據(jù)庫。本訓(xùn)練的第1步,先使用COMMIT命令提交原來的操作,同時標(biāo)志一個新的事務(wù)的開始。注意:在事務(wù)執(zhí)行過程中,隨時可以預(yù)覽數(shù)據(jù)的變化。對于比較大的事務(wù),可以使用SAVEPOINT命令在事務(wù)中間劃分一些斷點,用來作為回退點。(IT專家網(wǎng))

發(fā)布:2007-04-21 14:09    編輯:泛普軟件 · xiaona    [打印此頁]    [關(guān)閉]
相關(guān)文章:
長春OA系統(tǒng)
聯(lián)系方式

成都公司:成都市成華區(qū)建設(shè)南路160號1層9號

重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓

咨詢:400-8352-114

加微信,免費獲取試用系統(tǒng)

QQ在線咨詢

泛普長春OA行業(yè)資訊其他應(yīng)用

長春OA軟件 長春OA新聞動態(tài) 長春OA信息化 長春OA快博 長春OA行業(yè)資訊 長春軟件開發(fā)公司 長春門禁系統(tǒng) 長春物業(yè)管理軟件 長春倉庫管理軟件 長春餐飲管理軟件 長春網(wǎng)站建設(shè)公司