成都公司:成都市成華區(qū)建設(shè)南路160號1層9號
重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓
當(dāng)前位置:工程項目OA系統(tǒng) > 泛普各地 > 吉林OA系統(tǒng) > 長春OA系統(tǒng) > 長春OA行業(yè)資訊
數(shù)據(jù)庫中的事務(wù)處理概念及其應(yīng)用
一 什么是事務(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)過檢查確認(rèn)無誤后,一次性提交并寫入數(shù)據(jù)庫,在提交之前,必要的話所做的修改都可以取消。提交之后,就不能撤銷,提交成功后其他用戶才可以通過查詢?yōu)g覽數(shù)據(jù)的變化。
以事務(wù)的方式對數(shù)據(jù)庫進(jìn)行訪問,有如下的優(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(默認(rèn)狀態(tài)為OFF),則每當(dāng)執(zhí)行一條INSERT、DELETE或UPDATE命令對數(shù)據(jù)進(jìn)行修改后,就會馬上自動提交。設(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ù)在修改的時候會對記錄進(jìn)行鎖定,其他會話不能對鎖定的記錄進(jìn)行修改或加鎖,只有當(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))
本文內(nèi)容來自自互聯(lián)網(wǎng)公開信息或用戶自發(fā)貢獻(xiàn),該文觀點僅代表作者本人,版權(quán)歸原作者所有。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。若發(fā)現(xiàn)侵權(quán)或違規(guī)內(nèi)容請聯(lián)系電話4008352114或郵箱442699841@qq.com,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
本站推薦
- 1庫存管理系統(tǒng)數(shù)據(jù)庫分析之?dāng)?shù)據(jù)洞察與業(yè)務(wù)決策關(guān)鍵要點
- 2庫存管理系統(tǒng)數(shù)據(jù)庫下載_含多行業(yè)模板及使用教程
- 3數(shù)據(jù)庫采購管理系統(tǒng)論文之系統(tǒng)優(yōu)勢與應(yīng)用案例深度剖析
- 4數(shù)據(jù)庫超市采購管理系統(tǒng)助力高效采購降本增效
- 5c#數(shù)據(jù)庫倉儲管理系統(tǒng)助力高效庫存管控與數(shù)據(jù)精準(zhǔn)處理
- 6access數(shù)據(jù)庫倉庫管理系統(tǒng)助力高效庫存管控與精準(zhǔn)出入庫管理
- 7平臺管理工程師DBA指南:數(shù)據(jù)庫優(yōu)化技巧、性能監(jiān)測最佳實踐!
- 8請你提供具體的關(guān)于物流管理系統(tǒng)概念數(shù)據(jù)庫的標(biāo)題,以便我進(jìn)行改寫。
- 9揭秘:哪家開源數(shù)據(jù)庫項目管理系統(tǒng)最實惠?省成本的最佳選擇!

