溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

數(shù)據(jù)庫中事務(wù)的定義

發(fā)布時(shí)間:2021-08-30 21:49:01 來源:億速云 閱讀:296 作者:chen 欄目:數(shù)據(jù)庫

這篇文章主要介紹“數(shù)據(jù)庫中事務(wù)的定義”,在日常操作中,相信很多人在數(shù)據(jù)庫中事務(wù)的定義問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對(duì)大家解答”數(shù)據(jù)庫中事務(wù)的定義”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

  假設(shè)用戶A要從他的賬戶里面給B轉(zhuǎn)賬1000元,那么就需要兩步來實(shí)現(xiàn),首先從A的賬號(hào)減去1000元,再給B賬號(hào)加1000元。這兩個(gè)步驟中,任何一步都不能少或者出錯(cuò),這兩步要么都得到成功操作完成,要么什么都不做,中途出錯(cuò)也要回滾到轉(zhuǎn)賬開始之前的狀態(tài)。這樣的一個(gè)過程就是我們經(jīng)常說的事務(wù)。根據(jù)這個(gè)例子,下來我們就給事務(wù)定義如下:

事務(wù)的定義

  事務(wù)(transaction)是為了保證數(shù)據(jù)的一致性和完整性,由一系列數(shù)據(jù)操作或指令組成的一個(gè)不可分割的邏輯單元,這些操作或指令要么全都得到執(zhí)行,要么全都不執(zhí)行。如果事務(wù)成功執(zhí)行,則該事務(wù)中對(duì)所有數(shù)據(jù)所做的更改均會(huì)成為數(shù)據(jù)庫中持久性更改;如果事務(wù)執(zhí)行過程中遇到錯(cuò)誤,則所有執(zhí)行的操作和更改均應(yīng)得到取消,回滾到事務(wù)執(zhí)行前的狀態(tài)。從定義看,事務(wù)應(yīng)該滿足四個(gè)屬性,即ACID,也就是原子性、一致性、隔離性、持久性。

  原子性(Atomicity,或稱不可分割性):事務(wù)中的所有操作,要么全部都成功執(zhí)行,要么全部都沒有執(zhí)行完成。這種不可中斷的一系列操作就是原子性。轉(zhuǎn)賬過程中,A賬號(hào)減去1000元和B賬號(hào)加1000元,必須都得到執(zhí)行,或者都不執(zhí)行,否則都不符合邏輯和實(shí)際情況。

  一致性(Consistency):事務(wù)開始之前和事務(wù)完成以后,所有相關(guān)的數(shù)據(jù)狀態(tài)都會(huì)保持一致,不會(huì)使數(shù)據(jù)庫的完整性得到破壞。原子性會(huì)確保數(shù)據(jù)保持一致性,轉(zhuǎn)賬過程產(chǎn)生中斷,第一步執(zhí)行了,第二步?jīng)]有執(zhí)行,這個(gè)時(shí)候,只是A賬號(hào)少了1000元,而B賬號(hào)沒有加1000元,這個(gè)時(shí)候,數(shù)據(jù)就不一致了。

  隔離性(Isolation,又稱獨(dú)立性):數(shù)據(jù)庫中多個(gè)并發(fā)事務(wù)同時(shí)執(zhí)行時(shí),一個(gè)事務(wù)的執(zhí)行不能受到其他事務(wù)的干擾,也就是說,一個(gè)事務(wù)內(nèi)的操作和使用的數(shù)據(jù)對(duì)其他事務(wù)是隔離的,不會(huì)受到其他并發(fā)的事務(wù)影響。例如:事務(wù)查看數(shù)據(jù)所處的狀態(tài),要么是另一個(gè)并發(fā)事務(wù)的修改之前的狀態(tài),要么就是另一個(gè)事務(wù)修改之后的狀態(tài),不會(huì)是中間狀態(tài)的數(shù)據(jù)。

  持久性(Durability):事務(wù)執(zhí)行完后,對(duì)數(shù)據(jù)的修改就是永久的,即便系統(tǒng)出現(xiàn)故障,不會(huì)產(chǎn)生回滾,也不會(huì)影響到執(zhí)行結(jié)果。

事務(wù)的運(yùn)行模式

  通常,事務(wù)以3種模式運(yùn)行,他們分別是:自動(dòng)提交事務(wù)、顯式事務(wù)和隱式事務(wù)。

  1.自動(dòng)提交事務(wù)

  每一條單獨(dú)的SQL語句都在其執(zhí)行完成后進(jìn)行自動(dòng)提交事務(wù),即執(zhí)行SQL語句后就會(huì)馬上自動(dòng)隱式執(zhí)行COMMIT操作。如果出現(xiàn)錯(cuò)誤,則進(jìn)行事務(wù)回滾至之前狀態(tài)。

  2.顯式事務(wù)

  通過指定事務(wù)開始語句來顯式開啟事務(wù)來作為開始,并由以提交命令或者回滾命令來提交或者回滾事務(wù)作為結(jié)束的一段代碼就是一個(gè)用戶定義的顯式事務(wù)。

  3.隱式事務(wù)

  在隱式事務(wù)中,無需使用BEGINTRANASACTION來開啟事務(wù),每個(gè)SQL語句第一次執(zhí)行就會(huì)開啟一個(gè)事務(wù),直到用COMMIT[TRANSACTION]來提交或者ROLLBACK[TRANSACTION]來回滾結(jié)束事務(wù)。

  在ORACLE、MYSQL和SQLSERVER中,這幾種模式的開啟和關(guān)閉方式都有著自己不同的命。

到此,關(guān)于“數(shù)據(jù)庫中事務(wù)的定義”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI