新聞中心
隨著各種應(yīng)用系統(tǒng)的普及,數(shù)據(jù)庫(kù)管理系統(tǒng)也在盡力滿足各種用戶需求,并試圖為其提供更好的結(jié)果。為了保證數(shù)據(jù)的完整性和可靠性,數(shù)據(jù)庫(kù)管理系統(tǒng)采用了事務(wù)處理的概念。數(shù)據(jù)庫(kù)事務(wù)處理是一種保證不違反數(shù)據(jù)完整性、并發(fā)控制等問(wèn)題的機(jī)制。本文將介紹數(shù)據(jù)庫(kù)事務(wù)處理的概念、特性、行為以及其它相關(guān)問(wèn)題。

成都創(chuàng)新互聯(lián)公司專注于修文網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供修文營(yíng)銷型網(wǎng)站建設(shè),修文網(wǎng)站制作、修文網(wǎng)頁(yè)設(shè)計(jì)、修文網(wǎng)站官網(wǎng)定制、小程序定制開(kāi)發(fā)服務(wù),打造修文網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供修文網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。
1. 事務(wù)處理的概念
在數(shù)據(jù)庫(kù)系統(tǒng)中,事務(wù)是指一組要么全部執(zhí)行要么全部撤銷的操作。例如,把一筆錢從銀行賬戶轉(zhuǎn)移到另一個(gè)賬戶,這個(gè)操作可能會(huì)包含幾個(gè)步驟:驗(yàn)證源賬戶余額、扣除余額、驗(yàn)證目標(biāo)賬戶是否存在、將余額存入目標(biāo)賬戶中。在以上所有的步驟中,如果有任何一個(gè)步驟失敗了,那么這筆交易就被視為失敗,所有已經(jīng)執(zhí)行的步驟必須撤銷。
2. 事務(wù)處理的特性
事務(wù)處理具有ACID四個(gè)特性,分別是原子性、一致性、隔離性和持久性。
原子性:事務(wù)對(duì)數(shù)據(jù)的所有操作要么全部成功,要么全部失敗。如果事務(wù)執(zhí)行失敗,則系統(tǒng)將回滾所有對(duì)數(shù)據(jù)所做出的更改。
一致性:事務(wù)將數(shù)據(jù)從一種有效狀態(tài)轉(zhuǎn)移到另一種有效狀態(tài)。在事務(wù)處理期間,數(shù)據(jù)的完整性一直得到維護(hù),并且以一致的方式存儲(chǔ)到數(shù)據(jù)庫(kù)中。
隔離性:數(shù)據(jù)庫(kù)系統(tǒng)保證不同事務(wù)之間相互隔離,互不干擾,且高并發(fā)條件下也不會(huì)出現(xiàn)數(shù)據(jù)錯(cuò)亂的情況。
持久性:一旦提交,事務(wù)就不可逆轉(zhuǎn),對(duì)數(shù)據(jù)的修改持久保存,并且對(duì)其它用戶可見(jiàn)。
3. 事務(wù)處理的行為
在使用事務(wù)處理時(shí),事務(wù)需要按照特定的模式和步驟進(jìn)行。具體步驟如下:
(1)開(kāi)始:該步驟開(kāi)始執(zhí)行指定事務(wù)的過(guò)程,并且預(yù)留資源,以便將數(shù)據(jù)更改保存到數(shù)據(jù)庫(kù)中。
(2)執(zhí)行操作:當(dāng)開(kāi)始事務(wù)后,用戶就可以執(zhí)行操作,例如修改數(shù)據(jù)。
(3)提交:如果所有操作執(zhí)行成功,那么該事務(wù)將提交。在提交前,所有的修改將暫時(shí)存儲(chǔ)于內(nèi)存中。
(4)回滾:如果某個(gè)操作失敗,那么該事務(wù)將中止。所有未提交的修改都將被回滾或拋棄。
4. 使用事務(wù)處理的好處
事務(wù)處理常常被用于需要加強(qiáng)數(shù)據(jù)完整性和可靠性的環(huán)境中。在使用事務(wù)處理時(shí),可以同時(shí)處理多個(gè)數(shù)據(jù)操作,這樣能夠大大提高數(shù)據(jù)處理的效率。同時(shí),事務(wù)處理也可以讓應(yīng)用更加健壯和安全。比如,當(dāng)一個(gè)事務(wù)中的一個(gè)操作發(fā)生錯(cuò)誤時(shí),系統(tǒng)會(huì)自動(dòng)回滾該事務(wù)并撤銷所有的修改,這可以避免錯(cuò)誤對(duì)數(shù)據(jù)造成的損失。
5. 注意事項(xiàng)
雖然使用事務(wù)處理可以提高系統(tǒng)的穩(wěn)定性和數(shù)據(jù)的完整性,但還是需要注意一些問(wèn)題。例如,當(dāng)一個(gè)事務(wù)開(kāi)始時(shí),有必要預(yù)留一定的資源,因此事務(wù)處理可能使得機(jī)器的負(fù)載變高。此外,如果事務(wù)處理程序包含大量的操作,那么其性能可能會(huì)受到影響。在使用事務(wù)處理時(shí),用戶需要權(quán)衡其功能和性能,并且根據(jù)具體情況進(jìn)行調(diào)整。
本文介紹了數(shù)據(jù)庫(kù)事務(wù)處理的概念、特性、行為和一些注意事項(xiàng)。事務(wù)處理是現(xiàn)代數(shù)據(jù)庫(kù)系統(tǒng)中一個(gè)非常重要的特性,它可以保證數(shù)據(jù)的完整性和可靠性,對(duì)應(yīng)用程序的正確性和性能起著重要作用。使用事務(wù)處理需要注意其對(duì)數(shù)據(jù)庫(kù)的影響,用戶應(yīng)該根據(jù)實(shí)際情況進(jìn)行調(diào)整。
相關(guān)問(wèn)題拓展閱讀:
- 數(shù)據(jù)庫(kù)事務(wù)的處理模型
- 如何以事物的方式對(duì)數(shù)據(jù)庫(kù)進(jìn)行訪問(wèn)
數(shù)據(jù)庫(kù)事務(wù)的處理模型
事務(wù)有三種模型:
1.隱式事務(wù)是指每一條數(shù)據(jù)操作語(yǔ)句都自動(dòng)地成為一個(gè)事務(wù),事務(wù)的開(kāi)始是隱式的,事務(wù)的結(jié)束有明確的
標(biāo)記。
2.顯式事務(wù)是指有顯式的開(kāi)始和結(jié)束標(biāo)記的事務(wù),每個(gè)事務(wù)都有顯式的開(kāi)始和結(jié)束標(biāo)記。
3.自動(dòng)事務(wù)是系統(tǒng)自動(dòng)默認(rèn)的,開(kāi)始和結(jié)束不用標(biāo)記。
并發(fā)控制
1. 數(shù)據(jù)庫(kù)系統(tǒng)一個(gè)明顯的特點(diǎn)是多個(gè)用戶共享數(shù)據(jù)庫(kù)資源,尤其是多個(gè)用戶可以同時(shí)存取相同數(shù)據(jù)。
串行控制:如果事務(wù)是順序執(zhí)行的,即一個(gè)事務(wù)完成之后,再開(kāi)始另一個(gè)事務(wù)
并行控制:如果DBMS可以同時(shí)接受多個(gè)事務(wù),并且這些事務(wù)在時(shí)間上可以重疊執(zhí)行。
2.并發(fā)控制概述
事務(wù)是并發(fā)控制的基本單位,保證事讓塌務(wù)ACID的特性是事務(wù)處理的重要任務(wù),而并發(fā)操作有可能會(huì)破壞其ACID特性。
DBMS并發(fā)控制機(jī)制的責(zé)任:
對(duì)并發(fā)操作進(jìn)行正確調(diào)度,保證事務(wù)的隔離性更一般,確保數(shù)據(jù)庫(kù)的一致性。
如果沒(méi)有鎖定且多個(gè)用戶同時(shí)訪問(wèn)一個(gè)數(shù)據(jù)庫(kù),則當(dāng)他們的事務(wù)同時(shí)使用相同的數(shù)據(jù)時(shí)可能會(huì)發(fā)生問(wèn)題。由于并發(fā)操作帶來(lái)的數(shù)據(jù)不一致性包括:丟失數(shù)據(jù)修改、讀”臟”數(shù)據(jù)(臟讀)、不可重復(fù)讀、產(chǎn)生幽靈數(shù)據(jù)。
(1)丟失數(shù)據(jù)修改
當(dāng)兩個(gè)或多個(gè)事務(wù)選擇同一行,然后基于最初選定的值更新該行時(shí),會(huì)發(fā)生丟失更新問(wèn)題。每個(gè)事務(wù)都不知道其它事務(wù)的存在。最后的更新將重寫由其它事務(wù)所做的更新,這將導(dǎo)致數(shù)據(jù)丟失。如上例。
再例如,兩個(gè)編輯人員制作了同一文檔的電子復(fù)本。每個(gè)編輯人員獨(dú)立地更改其復(fù)本,然后保存更改后的復(fù)本,這樣就覆蓋了原始文檔。最后保存其更改復(fù)本的編輯人員覆蓋了之一個(gè)編輯人員所做的更改。如果在之一個(gè)編輯人員完坦禪圓成之后第二個(gè)編輯人員才能進(jìn)行更改,則可以避免該問(wèn)題。
(2)讀“臟”數(shù)據(jù)(臟讀)
讀“臟”數(shù)據(jù)是指事務(wù)T1修改某一數(shù)據(jù),并將其寫回磁盤,事務(wù)T2讀取同一數(shù)據(jù)后,T1由于某種原因被除撤消,而此時(shí)T1把已修改過(guò)的數(shù)據(jù)又恢復(fù)原值,T2讀到的數(shù)據(jù)與數(shù)據(jù)庫(kù)的數(shù)據(jù)不一致,則T2讀到的數(shù)據(jù)就為“臟”數(shù)據(jù),即不正確的數(shù)據(jù)。
例如:一個(gè)編輯人員正在更改電子文檔。在更改過(guò)程中,另一個(gè)編輯人員復(fù)制了該文檔(該復(fù)本包含到目前為止所做的全部更改)并將其分發(fā)給預(yù)期的用戶。此后,之一個(gè)編輯人員認(rèn)為所做的更改是錯(cuò)誤的,于是刪除了所做的編輯并保存了文檔。分發(fā)給用戶的文檔包含不再存在的編輯內(nèi)容,并且這些編輯內(nèi)容應(yīng)認(rèn)為從未存在過(guò)。如果在之一個(gè)編輯人員確定最終更改前任何人都不能讀取更改的文檔,則可以避免該問(wèn)題。
( 3)不可重復(fù)讀
指事務(wù)T1讀取數(shù)據(jù)后,事務(wù)T2執(zhí)行更新操作,使T1無(wú)法讀取前一次結(jié)果。不可重復(fù)讀包括三種情況:
事務(wù)T1讀取某一數(shù)據(jù)后,T2對(duì)其做了修改,當(dāng)T1再次讀該數(shù)據(jù)后,得到與前一不同的值。
(4)產(chǎn)生幽靈數(shù)據(jù)
按一定條件從數(shù)據(jù)庫(kù)中讀取了某些記錄后,T2刪除了其中部分記錄,當(dāng)T1再次按相同條件讀取數(shù)據(jù)時(shí),發(fā)現(xiàn)某些記錄消失
T1按一定條件從數(shù)據(jù)庫(kù)中讀取某些數(shù)據(jù)記錄后,T2插入了一些記錄,當(dāng)T1再次按相同條件讀取數(shù)據(jù)時(shí),發(fā)現(xiàn)多了一些記錄襲兄。
如何以事物的方式對(duì)數(shù)據(jù)庫(kù)進(jìn)行訪問(wèn)
一 事務(wù)的概念
事務(wù)是由相關(guān)操作構(gòu)成毀散宏的一個(gè)完整的操作單元。兩次連續(xù)成功的COMMIT或ROLLBACK之間的操作,稱為一個(gè)事務(wù)。在一個(gè)事務(wù)內(nèi),數(shù)據(jù)的修改一起提交或撤銷,如果發(fā)生故障或系統(tǒng)錯(cuò)誤,整個(gè)事務(wù)也會(huì)自動(dòng)撤銷。
oracle的數(shù)據(jù)語(yǔ)音分為數(shù)據(jù)定義語(yǔ)言(DDL)、數(shù)據(jù)控制語(yǔ)言(DCL)和數(shù)據(jù)操縱語(yǔ)言(DML)。其中的DML語(yǔ)言會(huì)生成事務(wù),其他兩種語(yǔ)言只要執(zhí)行,事務(wù)就會(huì)結(jié)束。
簡(jiǎn)單的說(shuō)DML語(yǔ)言可以建立事務(wù),DDL和DCL不能建立事務(wù)。
DML語(yǔ)言包括幾個(gè)命令,例如 select insert delete update等等,這些命令執(zhí)行后,當(dāng)前用戶的顯示信息是更改了,但是其他人訪問(wèn)你改的表的時(shí)候數(shù)據(jù)并沒(méi)有更改,需要使用commit確認(rèn)后才能更改。如果當(dāng)前用戶在沒(méi)有執(zhí)行commit前反悔操作了,那使用rollback命令可以回退到執(zhí)行操縱語(yǔ)句之前,但是如果已經(jīng)執(zhí)行了commit語(yǔ)句是無(wú)法回退的。
比如,我們?nèi)ャy行轉(zhuǎn)賬,操作可以分為下面兩個(gè)環(huán)節(jié):
(1) 從之一個(gè)賬戶劃出款項(xiàng)。
(2) 將款項(xiàng)存入第二個(gè)賬戶。
在這個(gè)過(guò)程中,兩個(gè)環(huán)節(jié)是關(guān)聯(lián)的。之一個(gè)賬戶劃出款項(xiàng)必須保證正確的存入第二個(gè)賬戶,如果第二個(gè)環(huán)節(jié)沒(méi)有完成,整個(gè)的過(guò)程都應(yīng)該取消,否則就會(huì)發(fā)生丟失款項(xiàng)的問(wèn)題。整個(gè)交易過(guò)程,可以看作是一個(gè)事物,成功則全部成功,失敗則需要全部撤消,這樣可以避免當(dāng)操作的中間環(huán)節(jié)出現(xiàn)問(wèn)題時(shí),產(chǎn)生數(shù)據(jù)不一致的問(wèn)題。
一個(gè)事務(wù)是由一個(gè)可執(zhí)行的SQL語(yǔ)句開(kāi)始,一個(gè)可執(zhí)行SQL語(yǔ)句產(chǎn)生對(duì)實(shí)例的調(diào)用。在事務(wù)開(kāi)始時(shí),被賦給一個(gè)可用回滾段,記錄該事務(wù)的回滾項(xiàng)。一個(gè)事務(wù)以下列任何一個(gè)出現(xiàn)而結(jié)束。數(shù)據(jù)庫(kù)事務(wù)是一個(gè)邏輯上掘蠢的劃分,有的時(shí)候并不是很明顯,它可以是一個(gè)操作步驟,也可以是多個(gè)操作步驟。
我們可纖冊(cè)以這樣理解數(shù)據(jù)庫(kù)事物:對(duì)數(shù)據(jù)庫(kù)所做的一系列修改,在修改過(guò)程中,暫時(shí)不寫入數(shù)據(jù)庫(kù),而是緩存起來(lái),用戶在自己的終端可以預(yù)覽變化,直到全部修改完成,并經(jīng)過(guò)檢查確認(rèn)無(wú)誤后,一次性提交并寫入數(shù)據(jù)庫(kù),在提交之前,必要的話所做的修改都可以取消。提交之后,就不能撤銷,提交成功后其他用戶才可以通過(guò)查詢?yōu)g覽數(shù)據(jù)的變化。
以事務(wù)的方式對(duì)數(shù)據(jù)庫(kù)進(jìn)行訪問(wèn),有如下的優(yōu)點(diǎn):
* 把邏輯相關(guān)的操作分成了一個(gè)組。
* 在數(shù)據(jù)永久改變前,可以預(yù)覽數(shù)據(jù)變化。
* 能夠保證數(shù)據(jù)的讀一致性。
二 數(shù)據(jù)庫(kù)事務(wù)的應(yīng)用
數(shù)據(jù)庫(kù)事務(wù)處理可分為隱式和顯式兩種。顯式事務(wù)操作通過(guò)命令實(shí)現(xiàn),隱式事務(wù)由系統(tǒng)自動(dòng)完成提交或撤銷(回退)工作,無(wú)需用戶的干預(yù)。
隱式提交的情況包括:當(dāng)用戶正常退出SQL*Plus或執(zhí)行CREATE、DROP、GRANT、REVOKE等命令時(shí)會(huì)發(fā)生事務(wù)的自動(dòng)提交。
還有一種情況,如果把系統(tǒng)的環(huán)境變量AUTOCOMMIT設(shè)置為ON(默認(rèn)狀態(tài)為OFF),則每當(dāng)執(zhí)行一條INSERT、DELETE或UPDATE命令對(duì)數(shù)據(jù)進(jìn)行修改后,就會(huì)馬上自動(dòng)提交。設(shè)置命令格式如下:
SET AUTOCOMMIT ON/OFF
隱式回退的情況包括:當(dāng)異常結(jié)束SQL*Plus或系統(tǒng)故障發(fā)生時(shí),會(huì)發(fā)生事務(wù)的自動(dòng)回退。
顯式事務(wù)處理的數(shù)據(jù)庫(kù)事務(wù)操作語(yǔ)句有3條,分別是COMMIT,ROLLBACK,SAVEPOINT語(yǔ)句。
COMMIT是數(shù)據(jù)庫(kù)事物提交,將變化寫入數(shù)據(jù)庫(kù)。此操作把多個(gè)步驟對(duì)數(shù)據(jù)庫(kù)的修改,一次性地永久寫入數(shù)據(jù)庫(kù),代表數(shù)據(jù)庫(kù)事務(wù)的成功執(zhí)行。ROLLBACK是數(shù)據(jù)庫(kù)事務(wù)回退,撤銷對(duì)數(shù)據(jù)庫(kù)的修改。操作在發(fā)生問(wèn)題時(shí),把對(duì)數(shù)據(jù)庫(kù)已經(jīng)作出的修改撤消,回退到修改前的狀態(tài)。在操作過(guò)程中,一旦發(fā)生問(wèn)題,如果還沒(méi)有提交操作,則隨時(shí)可以使用ROLLBACK來(lái)撤消前面的操作。SAVEPOINT則用于在事務(wù)中間建立一些保存點(diǎn),ROLLBACK可以使操作回退到這些點(diǎn)撤上邊,而不必撤銷全部的操作。一旦COMMIT完成,就不能用ROLLBACK來(lái)取消已經(jīng)提交的操作。一旦ROLLBACK完成,被撤消的操作要重做,必須重新執(zhí)行相關(guān)操作語(yǔ)句。
如何開(kāi)始一個(gè)新的事務(wù)呢?一般情況下,開(kāi)始一個(gè)會(huì)話(即連接數(shù)據(jù)庫(kù)),執(zhí)行之一條SQL語(yǔ)句將開(kāi)始一個(gè)新的事務(wù),或執(zhí)行COMMIT提交或ROLLBACK撤銷事務(wù),也標(biāo)志新的事務(wù)的開(kāi)始。另外,執(zhí)行DDL(如CREATE)或DCL命令也將自動(dòng)提交前一個(gè)事務(wù)而開(kāi)始一個(gè)新的事務(wù)。
數(shù)據(jù)在修改的時(shí)候會(huì)對(duì)記錄進(jìn)行鎖定,其他會(huì)話不能對(duì)鎖定的記錄進(jìn)行修改或加鎖,只有當(dāng)前會(huì)話提交或撤銷后,記錄的鎖定才會(huì)釋放。
例如修改雇員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ù)庫(kù)。本訓(xùn)練的第1步,先使用COMMIT命令提交原來(lái)的操作,同時(shí)標(biāo)志一個(gè)新的事務(wù)的開(kāi)始。注意:在事務(wù)執(zhí)行過(guò)程中,隨時(shí)可以預(yù)覽數(shù)據(jù)的變化。對(duì)于比較大的事務(wù),可以使用SAVEPOINT命令在事務(wù)中間劃分一些斷點(diǎn),用來(lái)作為回退點(diǎn)。
數(shù)據(jù)庫(kù)的事務(wù)處理的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于數(shù)據(jù)庫(kù)的事務(wù)處理,數(shù)據(jù)庫(kù)事務(wù)處理簡(jiǎn)介,數(shù)據(jù)庫(kù)事務(wù)的處理模型,如何以事物的方式對(duì)數(shù)據(jù)庫(kù)進(jìn)行訪問(wèn)的信息別忘了在本站進(jìn)行查找喔。
創(chuàng)新互聯(lián)服務(wù)器托管擁有成都T3+級(jí)標(biāo)準(zhǔn)機(jī)房資源,具備完善的安防設(shè)施、三線及BGP網(wǎng)絡(luò)接入帶寬達(dá)10T,機(jī)柜接入千兆交換機(jī),能夠有效保證服務(wù)器托管業(yè)務(wù)安全、可靠、穩(wěn)定、高效運(yùn)行;創(chuàng)新互聯(lián)專注于成都服務(wù)器托管租用十余年,得到成都等地區(qū)行業(yè)客戶的一致認(rèn)可。
分享題目:數(shù)據(jù)庫(kù)事務(wù)處理簡(jiǎn)介(數(shù)據(jù)庫(kù)的事務(wù)處理)
標(biāo)題路徑:http://www.5511xx.com/article/dphshje.html


咨詢
建站咨詢
