mySQL教學(xué)第10章事務(wù)和鎖_第1頁
mySQL教學(xué)第10章事務(wù)和鎖_第2頁
mySQL教學(xué)第10章事務(wù)和鎖_第3頁
mySQL教學(xué)第10章事務(wù)和鎖_第4頁
mySQL教學(xué)第10章事務(wù)和鎖_第5頁
已閱讀5頁,還剩16頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、mySQL教學(xué)第10章事務(wù)和鎖mySQL教學(xué)第10章事務(wù)和鎖本章內(nèi)容10.1 事務(wù)(Transact)介紹10.2 事務(wù)的特性10.3 事務(wù)的類型10.4 事務(wù)控制語句10.5 事務(wù)并發(fā)產(chǎn)生的問題10.6 鎖 表級鎖 行級鎖10.7 事務(wù)和鎖綜合練習(xí)本章內(nèi)容10.1 事務(wù)(Transact)介紹10.1事務(wù)(Transact)介紹事務(wù)是指一個邏輯單元的工作任務(wù),這些工作任務(wù)要么全做,要么全部放棄。它必須同時滿足四個特性:原子性一致性隔離性持久性10.1事務(wù)(Transact)介紹事務(wù)是指一個邏輯單元的工10.2事務(wù)特性1原子性(Atomic) 表示組成一個事務(wù)的多個數(shù)據(jù)庫操作是一個不可分隔的原

2、子單元,只有所有的操作執(zhí)行成功,整個事務(wù)才提交,事務(wù)中任何一個數(shù)據(jù)庫操作失敗,已經(jīng)執(zhí)行的任何操作都必須撤銷,讓數(shù)據(jù)庫返回到初始狀態(tài)。一致性(Consistency)事務(wù)操作成功后,數(shù)據(jù)庫所處的狀態(tài)和它的業(yè)務(wù)規(guī)則是一致的,即數(shù)據(jù)不會被破壞。10.2事務(wù)特性1原子性(Atomic)事務(wù)特性2隔離性(Isolation)在并發(fā)數(shù)據(jù)操作時,不同的事務(wù)擁有各自數(shù)據(jù)空間,它們的操作不會對對方產(chǎn)生干擾。數(shù)據(jù)庫規(guī)定了多種事務(wù)隔離級別,不同隔離級別對應(yīng)不同的干擾程度,隔離級別越高,數(shù)據(jù)一致性越好,但并發(fā)性越弱。持久性(Durabiliy) 一旦事務(wù)提交成功后,事務(wù)中所有的數(shù)據(jù)操作都必須被持久化到數(shù)據(jù)庫中,即使提

3、交事務(wù)后,數(shù)據(jù)庫馬上崩潰,在數(shù)據(jù)庫重啟時,也必須能保證能夠通過某種機制恢復(fù)數(shù)據(jù)。 事務(wù)特性2隔離性(Isolation)10.3事務(wù)類型1自動提交事務(wù)系統(tǒng)默認(rèn)每個TRANSACTSQL命令都是一個事務(wù)處理,由系統(tǒng)自動開始并提交隱式事務(wù):不需要顯示開始事務(wù),需要顯示提交該類事務(wù)是任何單獨的 INSERT、UPDATE 或者DELETE語句構(gòu)成。當(dāng)有大量的DDL和DML命令執(zhí)行時會自動開始,并一直保持到用戶明確提交為止。10.3事務(wù)類型1自動提交事務(wù)事務(wù)類型2顯式事務(wù)該類事務(wù)是用戶自定義事務(wù),是以START TRANSACTION(事務(wù)開始)開頭,以 COMMIT TRANSACTION(事務(wù)提交

4、)或者 ROLLBACK TRANSACTION(回滾事務(wù))語句結(jié)束的。分布式事務(wù) 跨越多個服務(wù)器的事務(wù)稱為分布式事務(wù)。自從mySQL5.03就開始支持分布式事務(wù)。事務(wù)類型2顯式事務(wù)10.4事務(wù)控制1START TRANSACTION該語句標(biāo)記一個顯式事務(wù)的開始點,即事務(wù)開始。其語法如下:START TRAN | TRANSACTION transaction_name | tran_name_variable WITH MARK description ; COMMIT TRANSACTION該語句標(biāo)志一個成功的隱性事務(wù)或顯式事務(wù)的結(jié)束,即事務(wù)提交。其語法如下:COMMIT TRAN | T

5、RANSACTION transaction_name | tran_name_variable ; 10.4事務(wù)控制1START TRANSACTION.事務(wù)控制2ROLLBACK TRANSACTION 該語句將顯式事務(wù)或隱性事務(wù)回滾到事務(wù)的起點或事務(wù)內(nèi)的某個保存點。其語法如下:ROLLBACK TRAN | TRANSACTION transaction_name | tran_name_variable| savepoint_name | savepoint_variable ; SET AUTOCOMMIT 可以修改當(dāng)前連接事務(wù)提交方式。SET AUTOCOMMIT=0,則需要明確的

6、命令進(jìn)行提交或者回滾。.事務(wù)控制2ROLLBACK TRANSACTION 10.5 數(shù)據(jù)并發(fā)的問題11.臟讀(Dirty Read)臟讀是指某個事務(wù)(A)讀取另外事務(wù)(B)尚未提交的更改數(shù)據(jù),并在這個數(shù)據(jù)的基礎(chǔ)上操作。如果恰巧 B事務(wù)回滾,那么 A事務(wù)讀到的數(shù)據(jù)根本是不被承認(rèn)的。2.不可重復(fù)讀(Unrepeatable Read) 不可重復(fù)讀是指 A事務(wù)讀取了 B事務(wù)已經(jīng)提交的更改數(shù)據(jù)。10.5 數(shù)據(jù)并發(fā)的問題11.臟讀(Dirty Read)數(shù)據(jù)并發(fā)的問題23. 幻象讀(Phantom Read) A事務(wù)讀取B事務(wù)提交的新增數(shù)據(jù),這時 A事務(wù)將出現(xiàn)幻象讀的問題。 4. 第一類丟失更新A事務(wù)

7、撤銷時,把已經(jīng)提交的B事務(wù)的更新數(shù)據(jù)覆蓋了。5. 第二類丟失更新 A事務(wù)覆蓋B事務(wù)已經(jīng)提交的數(shù)據(jù),造成 B事務(wù)所做操作丟失。 數(shù)據(jù)并發(fā)的問題23. 幻象讀(Phantom Read) 10.6 鎖(Lock)數(shù)據(jù)庫中的鎖是指一種軟件機制,用來控制防止某個用戶(進(jìn)程會話)在已經(jīng)占用了某種數(shù)據(jù)資源時,其他用戶做出影響本用戶數(shù)據(jù)操作或?qū)е聰?shù)據(jù)非完整性和非一致性問題發(fā)生的手段。鎖概述MySQL鎖和數(shù)據(jù)庫引擎InnoDB和MyISAM支持表級鎖InnoDB事務(wù)實現(xiàn)的行級鎖10.6 鎖(Lock)數(shù)據(jù)庫中的鎖是指一種軟件機制,用來控MySQL鎖和數(shù)據(jù)庫引擎相對于其他數(shù)據(jù)庫而言,MySQL的鎖機制比較簡單,

8、最顯著的特點是不同的存儲引擎支持不同的鎖機制。MyISAM和MEMORY存儲引擎采用表級鎖DBD存儲引擎采用的是頁面鎖和表級鎖。InnoDB支持行級鎖、表級鎖,默認(rèn)情況采用行級鎖。MySQL鎖和數(shù)據(jù)庫引擎相對于其他數(shù)據(jù)庫而言,MySQL的鎖三種粒度鎖的特性表級鎖開銷小,加鎖快,不會出現(xiàn)死鎖,鎖定力度大,發(fā)生沖突所的概率高,并發(fā)度低。行級鎖開銷大,加鎖慢,會出現(xiàn)死鎖,鎖定力度最小,發(fā)生鎖沖突的概率最低,并發(fā)度高。頁面鎖開銷和加鎖時間介于表鎖和行鎖之間,會出現(xiàn)死鎖,鎖定力度介于表和行行級鎖之間,并發(fā)度一般。三種粒度鎖的特性表級鎖MySQL表級鎖的鎖模式表共享鎖(Table Read Lock)表獨

9、占鎖(Table Write)MySQL表級鎖的鎖模式表共享鎖(Table Read Lo表級鎖給TStudent表和TScore表添加讀鎖lock tables TStudent read,TScore read;lock tables TStudent read local ,TScore read local;Local參數(shù)允許在表尾并發(fā)插入如果加的read鎖,只能讀取不能夠更改數(shù)據(jù),并且只能訪問加鎖的表。解鎖表unlock tables表級鎖給TStudent表和TScore表添加讀鎖添加表級寫鎖給TStudent表添加寫鎖lock tables TStudent write添加表級寫

10、鎖給TStudent表添加寫鎖MySQL的InnoDB引擎行的鎖共享鎖(S) InnoDB引擎,共享鎖用于所有的只讀數(shù)據(jù)操作獨占鎖(X)為修改數(shù)據(jù)而保留的,它所鎖定的資源,其他事務(wù)不能讀取也不能修改。意向共享鎖(IS)意向獨占鎖(IX)意向鎖是InnoDB內(nèi)部使用的,這兩種意向鎖都是表鎖,比如事務(wù)打算給行加共享鎖,先在表上添加IS鎖MySQL的InnoDB引擎行的鎖共享鎖(S)鎖與SQl語句對于Update Delete和Insert語句 InnoDB會自動給涉及數(shù)據(jù)集加排它鎖對于select語句InnoDB不加任何鎖,可以顯示加鎖。Select * from TStudent2 where studentid=00001 for update Select * from TStudent2 where studentid

溫馨提示

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

評論

0/150

提交評論