《數(shù)據(jù)庫技術(shù)及應用(MySQL)》課件 第9章 事務與鎖_第1頁
《數(shù)據(jù)庫技術(shù)及應用(MySQL)》課件 第9章 事務與鎖_第2頁
《數(shù)據(jù)庫技術(shù)及應用(MySQL)》課件 第9章 事務與鎖_第3頁
《數(shù)據(jù)庫技術(shù)及應用(MySQL)》課件 第9章 事務與鎖_第4頁
《數(shù)據(jù)庫技術(shù)及應用(MySQL)》課件 第9章 事務與鎖_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

MySQL數(shù)據(jù)庫技術(shù)及應用第9章事務與鎖實際操作中常常是多個用戶共享數(shù)據(jù)庫。而當多個用戶訪問同一份數(shù)據(jù)時,一個用戶在更改數(shù)據(jù)的過程中可能有其他用戶同時發(fā)起更改請求,為了保證數(shù)據(jù)的更新從一個一致性狀態(tài)變更為另一個一致性狀態(tài),有必要引入事務的概念。事務是由一系列數(shù)據(jù)操作命令組成,是數(shù)據(jù)庫應用程序的基本邏輯操作單元。鎖機制用于對多個用戶進行并發(fā)控制。前言學習要點理解事務的概念掌握事務的基本操作理解事務的并發(fā)處理的概念理解鎖機制的概念第9章事務與鎖學習內(nèi)容9.1事務9.2事務的并發(fā)處理9.3鎖第9章事務與鎖事務(transaction)是由作為一個邏輯單元的一條或多條SQL語向組成的,在同一個事務當中,這些操作最終要么全部執(zhí)行成功,要么全部失敗,不會存在部分成功的情況。其作用是作為整體永久地修改數(shù)據(jù)庫的內(nèi)容,或者作為整體取消對數(shù)據(jù)庫的修改。事務是數(shù)據(jù)庫程序的基本單位,一般地,一個程序可以包含多個事務。數(shù)據(jù)存儲的邏輯單位是數(shù)據(jù)塊,數(shù)據(jù)操作的邏輯單位是事務。事務通??梢园ǘ鄺l更新操作(INSERT、UPDATE和DELETE語句),這些更新操作是一個不可分割的邏輯工作單元。第9章事務與鎖9.1事務9.1.1事務特性事務被定義為一個邏輯工作單元,是一組不可分制的SQL語句。數(shù)據(jù)庫理論對事務有很嚴格的定義,指明事務有4個基本特性。1.原子性2.一致性3.隔離性4.持久性第9章事務與鎖9.1事務9.1.2事務控制語句事務的基本操作包括開始、提交、撤銷、保存等。1.開始事務開始事務可以使用STARTTRANSACTION語句來顯式地啟動一個事務;另外,當一個應用程序的第一條SQL語句或者在COMMIT或ROLLBACK語句后的第一條SQL語句執(zhí)行后,一個新的事務也就開始了。語法格式如下。STARTTRANSACTION|BEGINWORK第9章事務與鎖9.1事務9.1.2事務控制語句2.提交事務COMMIT語句是提交語句,它使從事務開始以來所執(zhí)行的所有數(shù)據(jù)修改都將成為數(shù)據(jù)庫的永久部分,其也標志著一個事務的結(jié)束。語法格式如下。COMMIT[WORK][AND[NO]CHAIN][[NO]RELEASE]第9章事務與鎖9.1事務9.1.2事務控制語句3.撤銷事務撤銷事務可以使用ROLLBACK語句,該語句可以撤銷事務對數(shù)據(jù)所做的修改,同時可以結(jié)束當前事務。語法格式如下。ROLLBACK[WORK][AND[NO]CHAIN][[NO]RELEASE]第9章事務與鎖9.1事務9.1.2事務控制語句4.設置保存點ROLLBACK語句除了可以撤銷整個事務之外,還可以用來使事務回滾到某個點,在這之前需要使用SAVEPOINT語句來設置保存點。語法格式如下。SAVEPOINTsavepoint_nameROLLBACKTOSAVEPOINT語句可以使事務回滾到已命名的保存點。如果在保存點被設置之后當前事務對數(shù)據(jù)進行了更改,則這些更改會在回滾時被撤銷。語法格式如下。ROLLBACK[WORK]TOSAVEPOINTsavepoint_name第9章事務與鎖9.1事務9.1.2事務控制語句【例9-1】創(chuàng)建trans數(shù)據(jù)庫和customer表,在表中插入記錄后,開始第1個事務,更新表的記錄,提交第1個事務;開始第2個事務,更新表的記錄,回滾第2個事務。執(zhí)行過程如下。(1)查看MySQL的隔離級別。(2)創(chuàng)建trans數(shù)據(jù)庫和customer表,并在表中插入記錄。(3)開始第一個事務,更新表的記錄,然后提交第一個事務。(4)開始第2個事務,更新表的記錄,然后回滾第2個事務。第9章事務與鎖9.1事務為了處理并發(fā)事務中可能出現(xiàn)的臟讀、不可重復讀、幻讀等問題,數(shù)據(jù)庫實現(xiàn)了不同級別的事務隔離,以防止事務的相互影響?;贏NSI/ISOSQL規(guī)范,MySQL提供了4種事務隔離級別。1.未提交讀2.提交讀3.可重復讀4.可串行化第9章事務與鎖9.2事務的并發(fā)處理學習內(nèi)容9.1事務9.2事務的并發(fā)處理9.3鎖第9章事務與鎖為了處理并發(fā)事務中可能出現(xiàn)的臟讀、不可重復讀、幻讀等問題,數(shù)據(jù)庫實現(xiàn)了不同級別的事務隔離,以防止事務的相互影響?;贏NSI/ISOSQL規(guī)范,MySQL提供了4種事務隔離級別。1.未提交讀2.提交讀3.可重復讀4.可串行化第9章事務與鎖9.2事務的并發(fā)處理學習內(nèi)容9.1事務9.2事務的并發(fā)處理9.3鎖第9章事務與鎖鎖是計算機協(xié)調(diào)多個進程或線程并發(fā)訪問某一個資源的機制,在數(shù)據(jù)庫中,除傳統(tǒng)的計算資源(CPU、RAM、I/O)的爭用以外,數(shù)據(jù)也是一種供許多用戶共享的資源。如何保證數(shù)據(jù)并發(fā)訪問的一致性、有效性是所有數(shù)據(jù)庫必須解決的一個問題,鎖沖突也是影響數(shù)據(jù)庫并發(fā)訪問性能的一個重要因素。多用戶并發(fā)訪問數(shù)據(jù)庫時,不僅需要通過事務機制,還需要通過鎖來避免數(shù)據(jù)在并發(fā)操作過程中引起問題。鎖是防止其他事務訪問指定資源的手段,它是實現(xiàn)并發(fā)控制的主要方法和重要保障。從這個角度來說,鎖對數(shù)據(jù)庫而言顯得尤其重要,也更加復雜。第9章事務與鎖9.3鎖9.3.1鎖機制MySQL引入了鎖機制來管理并發(fā)訪問,即通過不同類型的鎖來控制多用戶并發(fā)訪問,實現(xiàn)了數(shù)據(jù)訪問的一致性。(1)鎖的粒度。鎖的粒度是指鎖的作用范圍。鎖的粒度可以分為行級鎖、表級鎖和頁級鎖。(2)隱式鎖與顯式鎖。MySQL自動加鎖被稱為隱式鎖,數(shù)據(jù)庫開發(fā)人員手動加鎖被稱為顯式鎖。(3)鎖的類型。鎖的類型包括讀鎖和寫鎖,其中讀鎖也被稱為共享鎖,寫鎖也被稱為排他鎖或者獨占鎖。第9章事務與鎖9.3鎖9.3.2鎖的級別MySQL有三種級別的鎖。1.表級鎖表級鎖是指整個表被客戶鎖定。根據(jù)鎖的類型,其他客戶不能向表中插入記錄,甚至從中讀數(shù)據(jù)也會受到限制。表級鎖分為讀鎖和寫鎖兩種。LOCKTABLES語句用于鎖定當前線程的表。語法格式如下。LOCKTABLEStable_name[ASalias]{READ[LOCAL]|[LOS_PRIORITY]WRITE}第9章事務與鎖9.3鎖9.3.2鎖的級別MySQL有三種級別的鎖。2.行級鎖行級鎖相比表級鎖或頁級鎖,對鎖定過程提供了更精細的控制。在這種情況下,只有線程使用的行是被鎖定的。表中的其他行對于其他線程都是可用的。行級鎖定最大的特點就是鎖定對象的顆粒度很小,由于鎖定顆粒度很小,所以發(fā)生鎖定資源爭用的概率也最小,能夠給予應用程序盡可能大的并發(fā)處理能力而提高一些需要高并發(fā)應用系統(tǒng)的整體性能。第9章事務與鎖9.3鎖鎖名排他鎖(X)共享鎖(S)意向排他鎖(IX)意向共享鎖(IS)X互斥互斥互斥互斥S互斥兼容互斥兼容IX互斥互斥兼容兼容IS互斥兼容兼容兼容9.3.2鎖的級別MySQL有三種級別的鎖。3.頁級鎖MySQL將鎖定表中的某些行稱作頁,被鎖定的行僅對于鎖定最初的線程是可行的。第9章事務與鎖9.3鎖9.3.3死鎖數(shù)據(jù)庫發(fā)生死鎖的前提是,多個事務都持有同一種不互斥(互斥排他鎖是不能同時存在的)鎖,還都在等待對方釋放鎖,繼續(xù)執(zhí)行,這樣就造成了數(shù)據(jù)庫的死鎖。1.死鎖發(fā)生的原因兩個或兩個以上的事務分別申請封鎖對方已經(jīng)封鎖的數(shù)據(jù)對象,導致長期等待而無法繼續(xù)運行下去的現(xiàn)象被稱為死鎖。例如,事務T1封鎖了數(shù)據(jù)R1,事務T2封鎖了數(shù)據(jù)R2,然后T1又請求封鎖R2,但T2已封鎖了R2,于是T1等待T2釋放R2上的鎖;接著T2又申請封鎖R1,但T1已封鎖了R1,T2也只能等待T1釋放R1上的鎖。這樣就形成了T1等待T2,而T2又等待T1的局面,T1和T2兩個事務永遠不能結(jié)束,這就發(fā)生了死鎖。第9章事務與鎖9.3鎖9.3.3死鎖2.對死鎖的處理在MySQL的InnoDB存儲引擎中,當檢測到死鎖時,通常會使一個事務釋放鎖并回滾,而另一個事務獲得鎖并繼續(xù)完成事務。第9章事務與鎖9.3鎖9.3.3死鎖3.避免死鎖的方法?在應用中,如果不同的程序會并發(fā)存取多個表,則應盡量地約定以相同的順序來訪問表,這樣可以大幅度降低產(chǎn)生死鎖的概率。?在程序以批量方式處理數(shù)據(jù)的時候,如果事先對數(shù)據(jù)排序,保證每個線程按固定的順序來處理記錄,則也可以大幅度降低產(chǎn)生死鎖的概率。?在事務中,如果要更新記錄,則應直接申請級別足夠的鎖,即排他鎖,而不應先申請共享鎖,更新時再申請排他鎖,因為當用戶申請排他鎖時,其他事務可能又已經(jīng)獲得了同一個數(shù)據(jù)記錄的共享鎖,從而造成鎖沖突,甚至死鎖。第9章事務與鎖9.3鎖本章小結(jié)本章主要講了MySQL數(shù)據(jù)庫管理系統(tǒng)中事務的概念,事務的ACID特性以及其

溫馨提示

  • 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

提交評論