《MySQL》課件-第9章 MySQL事務管理_第1頁
《MySQL》課件-第9章 MySQL事務管理_第2頁
《MySQL》課件-第9章 MySQL事務管理_第3頁
《MySQL》課件-第9章 MySQL事務管理_第4頁
《MySQL》課件-第9章 MySQL事務管理_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

第9章MySQL事務管理9.1事務屬性9.2事務處理9.3事務隔離級9.1事務屬性1.原子性原子性意味著每個事務都必須被看作是一個不可分割的單元。假設一個事務由兩個或者多個任務組成,其中的語句必須同時成功才能認為整個事務是成功的。如果事務失敗,系統(tǒng)將會返回到該事務以前的狀態(tài)。2.一致性不管事務是完全成功完成還是中途失敗,當事務使系統(tǒng)處于一致的狀態(tài)時存在一致性。例如從雇員數(shù)據(jù)庫中刪除了一個雇員,則所有和該雇員相關的數(shù)據(jù),包括工資記錄、職務變動記錄也要被刪除。在MySQL中,一致性主要由MySQL的日志機制處理,它記錄了數(shù)據(jù)庫的所有變化,為事務恢復提供了跟蹤記錄。如果系統(tǒng)在事務處理中間發(fā)生錯誤,MySQL恢復過程將使用這些日志來發(fā)現(xiàn)事務是否已經(jīng)完全成功地執(zhí)行,是否需要返回。因而一致性屬性保證了數(shù)據(jù)庫從不返回一個未處理完的事務。9.1事務屬性3.隔離性隔離性是指每個事務在它自己的空間發(fā)生,和其他發(fā)生在系統(tǒng)中的事務隔離,而且事務的結(jié)果只有在它完全被執(zhí)行時才能看到。即使在這樣的一個系統(tǒng)中同時發(fā)生了多個事務,隔離性原則保證某個特定事務在完全完成之前,其結(jié)果是看不見的。當系統(tǒng)支持多個同時存在的用戶和連接時,這就尤為重要。如果系統(tǒng)不遵循這個基本規(guī)則,就可能導致大量數(shù)據(jù)的破壞,如每個事務的各自空間的完整性很快地被其他沖突事務所侵犯。獲得絕對隔離性的唯一方法是保證在任意時刻只能有一個用戶訪問數(shù)據(jù)庫。當處理像MySQL這樣多用戶的RDBMS時,這不是一個實際的解決方法。但是,大多數(shù)事務系統(tǒng)使用頁級鎖定或行級鎖定隔離不同事務之間的變化,這是要以降低性能為代價的。9.1事務屬性4.持久性持久性是指即使系統(tǒng)崩潰,一個提交的事務仍然存在。當一個事務完成,數(shù)據(jù)庫的日志已經(jīng)被更新時,持久性就開始發(fā)生作用。大多數(shù)RDBMS產(chǎn)品通過保存所有行為的日志來保證數(shù)據(jù)的持久性,這些行為是指在數(shù)據(jù)庫中以任何方法更改數(shù)據(jù)。數(shù)據(jù)庫日志記錄了所有對于表的更新、查詢、報表等。如果系統(tǒng)崩潰或者數(shù)據(jù)存儲介質(zhì)被破壞,通過使用日志,系統(tǒng)能夠恢復在重啟前進行的最后一次成功的更新,反映了在崩潰時處于過程的事務的變化。MySQL通過保存一條記錄事務過程中系統(tǒng)變化的二進制事務日志文件來實現(xiàn)持久性。如果遇到硬件破壞或者突然的系統(tǒng)關機,在系統(tǒng)重啟時,通過使用最后的備份和日志就可以很容易地恢復丟失的數(shù)據(jù)。默認情況下,InnDB表是100%持久的。MyISAM表提供部分持久性,所有在最后一個FLUSHTABLES命令前進行的變化都能保證被存盤。

9.2事務處理在MySQL中,當一個會話開始時,系統(tǒng)變量AUTOCOMMIT值為1,即自動提交功能是打開的,當用戶每執(zhí)行一條SQL語句后,該語句對數(shù)據(jù)庫的修改就立即被提交成為持久性修改保存到磁盤上,一個事務也就結(jié)束了。因此,用戶必須關閉自動提交,事務才能由多條SQL語句組成,使用如下語句:SET@@AUTOCOMMIT=0;執(zhí)行此語句后,必須明確地指示每個事務的終止,事務中的SQL語句對數(shù)據(jù)庫所做的修改才能成為持久化修改。例如,執(zhí)行如下語句:deletefromxswhere學號='081101';select*fromxs;從執(zhí)行結(jié)果中發(fā)現(xiàn),表中已經(jīng)刪去了一行。但是,這個修改并沒有持久化,因為自動提交已經(jīng)關閉了。9.2事務處理1.開始事務當一個應用程序的第一條SQL語句或者在COMMIT或ROLLBACK語句(后面介紹)后的第一條SQL執(zhí)行后,一個新的事務也就開始了。另外還可以使用一條STARTTRANSACTION語句來顯式地啟動一個事務。語法格式:STARTTRANSACTION|BEGINWORK一條BEGINWORK語句可以用來替代STARTTRANSACTION語句,但是STARTTRANSACTION更常用些。9.2事務處理2.結(jié)束事務COMMIT語句是提交語句,它使得自從事務開始以來所執(zhí)行的所有數(shù)據(jù)修改成為數(shù)據(jù)庫的永久部分,也標志一個事務的結(jié)束,其語法格式為:COMMIT[WORK][AND[NO]CHAIN][[NO]RELEASE]說明:可選的ANDCHAIN子句會在當前事務結(jié)束時,立刻啟動一個新事務,并且新事務與剛結(jié)束的事務有相同的隔離等級。RELEASE子句在終止了當前事務后,會讓服務器斷開與當前客戶端的連接。包含NO關鍵詞可以抑制CHAIN或RELEASE完成。9.2事務處理MySQL使用的是平面事務模型,因此嵌套的事務是不允許的。在第一個事務里使用STARTTRANSACTION命令后,當?shù)诙€事務開始時,自動地提交第一個事務。同樣,下面的這些MySQL語句運行時都會隱式地執(zhí)行一個COMMIT命令:DROPDATABASE/DROPTABLECREATEINDEX/DROPINDEXALTERTABLE/RENAMETABLELOCKTABLES/UNLOCKTABLESSETAUTOCOMMIT=19.2事務處理3.撤銷事務ROLLBACK語句是撤銷語句,它撤銷事務所做的修改,并結(jié)束當前這個事務。

語法格式:ROLLBACK[WORK][AND[NO]CHAIN][[NO]RELEASE]在前面的舉例中,若在最后加上以下這條語句:rollbackwork;執(zhí)行完這條語句后,前面的刪除動作將被撤銷,可以使用SELECT語句查看該行數(shù)據(jù)是否還原。9.2事務處理4.回滾事務除了撤銷整個事務,用戶還可以使用ROLLBACKTO語句使事務回滾到某個點,在這之前需要使用SAVEPOINT語句來設置一個保存點。SAVEPOINT語法格式為:SAVEPOINTidentifier其中,identifier為保存點的名稱。ROLLBACKTOSAVEPOINT語句會向已命名的保存點回滾一個事務。如果在保存點被設置后,當前事務對數(shù)據(jù)進行了更改,則這些更改會在回滾中被撤銷。語法格式:ROLLBACK[WORK]TOSAVEPOINTidentifier當事務回滾到某個保存點后,在該保存點之后設置的保存點將被刪除。9.2事務處理RELEASESAVEPOINT語句會從當前事務的一組保存點中刪除已命名的保存點。不出現(xiàn)提交或回滾。如果保存點不存在,會出現(xiàn)錯誤。語法格式為:RELEASESAVEPOINTidentifier下面幾個語句說明了有關事務的處理過程:1.STARTTRANSACTION2.UPDATE…3.DELETE…4.SAVEPOINTS1;5.DELETE…6.ROLLBACKWORKTOSAVEPOINTS1;7.INSERT…8.COMMITWORK;說明:在以上語句中,第一行語句開始了一個事務;第2、3行語句對數(shù)據(jù)進行了修改,但沒有提交;第4行設置了一個保存點;第5行刪除了數(shù)據(jù),但沒有提交;第6行將事務回滾到保存點S1,這時第5行所做修改被撤銷了;第7行修改了數(shù)據(jù);第8行結(jié)束了這個事務,這時第2、3、7行對數(shù)據(jù)庫做的修改被持久化。9.3事務隔離級基于ANSI/ISOSQL規(guī)范,MySQL提供了下面4種隔離級:序列化(SERIALIZABLE)、可重復讀(REPEATABLEREAD)、提交讀(READCOMMITTED)、未提交讀(READUNCOMMITTED)。只有支持事務的存儲引擎才可以定義一個隔離級。定義隔離級可以使用SETTRANSACTION語句。語法格式:SET[GLOBAL|SESSION]TRANSACTIONISOLATIONLEVEL SERIALIZABLE|REPEATABLEREAD|READCOMMITTED|READUNCOMMITTED9.3事務隔離級說明:如果指定GLOBAL,那么定義的隔離級將適用于所有的SQL用戶;如果指定SESSION,則隔離級只適用于當前運行的會話和連接。MySQL默認為REPEATABLEREAD隔離級。(1)序列化:SERIALIZABLE如果隔離級為序列化,用戶之間通過一個接一個順序地執(zhí)行當前的事務提供了事務之間最大限度的隔離。

(2)可重復讀:REPEATABLEREAD在這一級上,事務不會被看成是一個序列。不過,當前在執(zhí)行事務的變化仍然不能看到,也就是說,如果用戶在同一個事務中執(zhí)行同條SELECT語句數(shù)次,結(jié)果總是相同的。(3)提交讀:READCOMMITTED在這一級上,不僅處于這一級的事務可以看到其他事務添加的新記錄,而且其他事務對現(xiàn)存記錄做出的修改一旦被提交,也可以看到。也就是說,這意味著在事務處理期間,如果其他事務修改了相應的表,那么同一個事務的多個SELECT語句可能返回不同的結(jié)果。(4)未提交讀:READUNCOMMITTED處于這個隔離級的事務可以讀到

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論