




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
數(shù)據(jù)庫(kù)原理與應(yīng)用教程-MySQL8.0第10章
事務(wù)與并發(fā)控制第10章
事務(wù)與并發(fā)控制關(guān)系型數(shù)據(jù)庫(kù)有四個(gè)顯著的特征,即安全性、完整性、并發(fā)性和監(jiān)測(cè)性。數(shù)據(jù)庫(kù)的安全性就是要保證數(shù)據(jù)庫(kù)中數(shù)據(jù)的安全,防止未授權(quán)用戶隨意修改數(shù)據(jù)庫(kù)中的數(shù)據(jù),確保數(shù)據(jù)的安全。完整性是數(shù)據(jù)庫(kù)的一個(gè)重要特征,也是保證數(shù)據(jù)庫(kù)中的數(shù)據(jù)切實(shí)有效、防止錯(cuò)誤、實(shí)現(xiàn)商業(yè)規(guī)則的一種重要機(jī)制。對(duì)任何系統(tǒng)都可以這樣說(shuō),沒(méi)有監(jiān)測(cè),就沒(méi)有優(yōu)化。只有通過(guò)對(duì)數(shù)據(jù)庫(kù)進(jìn)行全面的性能監(jiān)測(cè),也才能發(fā)現(xiàn)影響系統(tǒng)性能的因素和瓶頸,才能針對(duì)瓶頸因素,采取切合實(shí)際的策略,解決問(wèn)題,提高系統(tǒng)的性能。第10章
事務(wù)與并發(fā)控制為了充分利用數(shù)據(jù)庫(kù)資源,發(fā)揮數(shù)據(jù)庫(kù)共享資源的特點(diǎn),應(yīng)該允許多個(gè)用戶并行地存取數(shù)據(jù)庫(kù)。但這樣就會(huì)產(chǎn)生多個(gè)用戶程序并發(fā)存取同一數(shù)據(jù)的情況,若對(duì)并發(fā)操作不加控制就可能會(huì)存取和存儲(chǔ)不正確的數(shù)據(jù),破壞數(shù)據(jù)庫(kù)的一致性,所以數(shù)據(jù)庫(kù)管理系統(tǒng)必須提供并發(fā)控制機(jī)制。并發(fā)控制機(jī)制的好壞是衡量一個(gè)數(shù)據(jù)庫(kù)管理系統(tǒng)性能的重要標(biāo)志之一。MySQL以事務(wù)為單位通常使用鎖來(lái)實(shí)現(xiàn)并發(fā)控制。當(dāng)用戶對(duì)數(shù)據(jù)庫(kù)并發(fā)訪問(wèn)時(shí),為了確保事務(wù)完整性和數(shù)據(jù)庫(kù)一致性,需要使用鎖定。這樣,就可以保證任何時(shí)候都可以有多個(gè)正在運(yùn)行的用戶程序,但是所有用戶程序都在彼此完全隔離的環(huán)境中運(yùn)行。。10.1事務(wù)事務(wù)處理是數(shù)據(jù)庫(kù)的主要工作,事務(wù)由一系列的數(shù)據(jù)操作組成,是數(shù)據(jù)庫(kù)應(yīng)用程序的基本邏輯單元,用來(lái)保證數(shù)據(jù)的一致性。事務(wù)和存儲(chǔ)過(guò)程類似,由一系列SQL語(yǔ)句組成,是MySQL系統(tǒng)的執(zhí)行單元。在數(shù)據(jù)庫(kù)處理數(shù)據(jù)的時(shí)候,有一些操作是不可分割的整體,例如,用銀行卡消費(fèi)時(shí)首先要在賬戶扣除資金,然后再增加資金到商家賬戶。這些操作是不可分割的,不能只扣除不增加,也不能只增加不扣除。事務(wù)可以解決上面的問(wèn)題,即把這些操作放在一個(gè)容器里,強(qiáng)制用戶執(zhí)行完所有的操作或者不執(zhí)行任何一條語(yǔ)句。10.1.1事務(wù)的特性在MySQL中,事務(wù)必須具備四個(gè)特性:(1)原子性:事務(wù)必須是原子工作單元,對(duì)于其數(shù)據(jù)修改,要么全都執(zhí)行,要么全都不執(zhí)行。(2)一致性:一致性要求事務(wù)執(zhí)行完成后,將數(shù)據(jù)庫(kù)從一個(gè)一致?tīng)顟B(tài)轉(zhuǎn)變到另一個(gè)一致?tīng)顟B(tài)。(3)隔離性:也稱為獨(dú)立性,是指并行事務(wù)的修改必須與其它并行事務(wù)的修改相互獨(dú)立。(4)持久性:在事務(wù)完成提交之后,就對(duì)系統(tǒng)產(chǎn)生持久的影響,即事務(wù)的操作將寫入數(shù)據(jù)庫(kù)中,無(wú)論發(fā)生何種機(jī)器和系統(tǒng)故障都不應(yīng)該對(duì)其有任何影響。10.1.2事務(wù)的類型1.自動(dòng)提交事務(wù)如果沒(méi)有通過(guò)任何語(yǔ)句設(shè)置事務(wù)一條SQL語(yǔ)句就是一個(gè)事務(wù),即自動(dòng)提交事務(wù),語(yǔ)句執(zhí)行完事務(wù)就結(jié)束。CREATE、ALTER、DROP、INSERT、UPDATE、DELETE、SELECT、FETCH、OPEN、GRANT、REVOKE等【例10-1】使用CREATETABLE創(chuàng)建一個(gè)表。CREATETABLEstudent(IdCHAR(10),NameCHAR(6),SexCHAR(1))這條語(yǔ)句本身就構(gòu)成了一個(gè)事務(wù)。10.1.2事務(wù)的類型2.用戶定義事務(wù)在實(shí)際應(yīng)用中,大多數(shù)的事務(wù)處理采用了用戶定義的事務(wù)來(lái)處理。STARTTRANSACTION或BEGINWORK語(yǔ)句來(lái)定義明確的用戶定義事務(wù)的開(kāi)始。COMMITTRANSACTION或COMMITWORK語(yǔ)句將全部完成的語(yǔ)句明確地提交到數(shù)據(jù)庫(kù)中,表示事務(wù)操作成功。ROLLBACKTRANSACTION或ROLLBACKWORK語(yǔ)句將事務(wù)的操作全部回滾,即表示事務(wù)操作失敗。10.1.3事務(wù)處理語(yǔ)句1.START或BEGIN語(yǔ)句語(yǔ)法格式為:STARTTRANSACTION|BEGINWORK;MySQL默認(rèn)是自動(dòng)提交模式,即如果沒(méi)有顯示開(kāi)啟事務(wù),每一條SQL語(yǔ)句都會(huì)自動(dòng)提交。如果想要將一組SQL語(yǔ)句作為一個(gè)事務(wù),則必須先執(zhí)行以上語(yǔ)句顯示地開(kāi)啟一個(gè)事務(wù)。10.1.3事務(wù)處理語(yǔ)句2.COMMIT語(yǔ)句COMMIT語(yǔ)句用于提交一個(gè)事務(wù),它標(biāo)志一個(gè)顯式開(kāi)啟的事務(wù)成功的結(jié)束。語(yǔ)法格式:COMMIT[WORK];3.ROLLBACK語(yǔ)句ROLLBACK語(yǔ)句將顯式開(kāi)啟的事務(wù)回滾到事務(wù)的起點(diǎn)或事務(wù)內(nèi)的某個(gè)保存點(diǎn),它也標(biāo)志一個(gè)事務(wù)的結(jié)束。其語(yǔ)法格式為:ROLLBACK[WORK][TOsavepoint_name];10.1.3事務(wù)處理語(yǔ)句4.SAVEPOINT語(yǔ)句SAVEPOINT語(yǔ)句用于在事務(wù)內(nèi)設(shè)置保存點(diǎn)。語(yǔ)法格式:SAVEPOINTsavepoint_name;在事務(wù)內(nèi)的某個(gè)位置建立一個(gè)保存點(diǎn),使用戶可以將事務(wù)回滾到該保存點(diǎn)的狀態(tài),而不回滾整個(gè)事務(wù)。一個(gè)事務(wù)中可以設(shè)置多個(gè)保存點(diǎn),提交事務(wù)后保存點(diǎn)會(huì)被刪除。如果事務(wù)被回滾到到某個(gè)保存點(diǎn),在該保存點(diǎn)后創(chuàng)建的保存點(diǎn)也會(huì)消失。刪除不需要的保存點(diǎn),語(yǔ)句:RELEASESAVEPOINTsavepoint_name;10.1.3事務(wù)處理語(yǔ)句使用事務(wù)時(shí)應(yīng)注意以下兩點(diǎn):(1)不是所有的SQL語(yǔ)句都能放在事務(wù)里,通常INSERT、UPDATE、DELETE、SELECT等數(shù)據(jù)操作語(yǔ)句可以放在事務(wù)里,創(chuàng)建、刪除、修改數(shù)據(jù)庫(kù)或表等不能放在事務(wù)里。(2)事務(wù)要盡量的小,而且一個(gè)事務(wù)占用的資源越少越好。10.1.3事務(wù)處理語(yǔ)句【例10-2】定義一個(gè)事務(wù),將所有選修了C004號(hào)課程的學(xué)生的分?jǐn)?shù)加5分,并提交該事務(wù)。STARTTRANSACTION;USEteaching;UPDATEscSETscore=score+5WHEREcno='C004';COMMIT;10.1.3事務(wù)處理語(yǔ)句【例10-3】定義一個(gè)事務(wù),向teaching庫(kù)的student表中插入一行數(shù)據(jù),然后再刪除該行。執(zhí)行后,新插入的數(shù)據(jù)行并沒(méi)有被刪除。利用事務(wù)保存點(diǎn)來(lái)完成。STARTTRANSACTION;USEteaching;INSERTINTOstudent(sno,sname,ssex,sbirthday,major,grade)VALUES('2022010010','朱一虹','女','2003-5-6','電子信息','2022級(jí)');SAVEPOINTsavepoint1;DELETEFROMstudentWHEREsname='朱一虹';ROLLBACKTOsavepoint1;COMMIT;10.1.3事務(wù)處理語(yǔ)句【例10-4】創(chuàng)建一個(gè)存儲(chǔ)過(guò)程,在其中定義一個(gè)轉(zhuǎn)賬事務(wù),向bankcard數(shù)據(jù)庫(kù)的Trecord表中插入一行某賬號(hào)的轉(zhuǎn)出記錄數(shù)據(jù),另一賬號(hào)的轉(zhuǎn)入記錄數(shù)據(jù)。兩個(gè)插入操作都會(huì)觸發(fā)例9-11的Transactions觸發(fā)器,修改相應(yīng)的余額。USEbankcard;DELIMITER//CREATEPROCEDURErecord_tran()BEGINSTARTTRANSACTION;INSERTTrecord(TDate,AccNO,Expense,Income,OppAccNO,Place,Abstract)VALUES(CURDATE(),‘412542800335120***06’,500,NULL,‘436742800335120***05',NULL,'轉(zhuǎn)賬支出');10.1.3事務(wù)處理語(yǔ)句INSERTTrecord(TDate,AccNO,Expense,Income,OppAccNO,Place,Abstract)VALUES(CURDATE(),‘436742800335120***05’,NULL,500,‘412542800335120***06',NULL,'轉(zhuǎn)賬收入');COMMIT;END//調(diào)用存儲(chǔ)過(guò)程:CALLrecord_tran();10.2并發(fā)控制并發(fā)控制指的是當(dāng)多個(gè)用戶同時(shí)更新行時(shí),用于保護(hù)數(shù)據(jù)庫(kù)完整性的各種技術(shù),目的是保證一個(gè)用戶的工作不會(huì)對(duì)另一個(gè)用戶的工作產(chǎn)生不合理的影響。在某些情況下,這些措施保證了當(dāng)用戶和其他用戶一起操作時(shí),所得的結(jié)果和他單獨(dú)操作時(shí)的結(jié)果是一樣的。10.2.1并發(fā)帶來(lái)的問(wèn)題(1)丟失修改:指在一個(gè)事務(wù)讀取一個(gè)數(shù)據(jù)時(shí),另外一個(gè)事務(wù)也訪問(wèn)該同一數(shù)據(jù)。那么,在第一個(gè)事務(wù)中修改了這個(gè)數(shù)據(jù)后,第二個(gè)事務(wù)也修改了這個(gè)數(shù)據(jù)。這樣第一個(gè)事務(wù)內(nèi)的修改結(jié)果就被丟失,因此稱為丟失修改。例如:事務(wù)T1讀取某表中數(shù)據(jù)A=20,事務(wù)T2也讀取A=20,事務(wù)T1修改A=A-1,修改,事務(wù)T2也修改A=A-1;最終結(jié)果A=19,事務(wù)T1的修改被丟失。10.2.1并發(fā)帶來(lái)的問(wèn)題(2)臟讀:指當(dāng)一個(gè)事務(wù)正在訪問(wèn)數(shù)據(jù),并且對(duì)數(shù)據(jù)進(jìn)行了修改,而這種修改還沒(méi)有提交到數(shù)據(jù)庫(kù)中,這時(shí),另外一個(gè)事務(wù)也訪問(wèn)這個(gè)數(shù)據(jù),然后使用了這個(gè)數(shù)據(jù)。因?yàn)檫@個(gè)數(shù)據(jù)是還沒(méi)有提交的數(shù)據(jù),那么另外一個(gè)事務(wù)讀到的這個(gè)數(shù)據(jù)是“臟數(shù)據(jù)”,依據(jù)“臟數(shù)據(jù)”所做的操作可能是不正確的。例如:事務(wù)T1讀取某表中數(shù)據(jù)A=20,并修改A=A-1,寫回?cái)?shù)據(jù)庫(kù),事務(wù)T2讀取A=19,事務(wù)T1回滾了前面的操作,事務(wù)T2也修改A=A-1;最終結(jié)果A=18,事務(wù)T2讀取的就是“臟數(shù)據(jù)”。10.2.1并發(fā)帶來(lái)的問(wèn)題(3)不可重復(fù)讀:指在一個(gè)事務(wù)內(nèi),多次讀同一數(shù)據(jù)。在這個(gè)事務(wù)還沒(méi)有結(jié)束時(shí),另外一個(gè)事務(wù)也訪問(wèn)該同一數(shù)據(jù)。那么,在第一個(gè)事務(wù)中的兩次讀數(shù)據(jù)之間,由于第二個(gè)事務(wù)的修改,那么第一個(gè)事務(wù)兩次讀到的數(shù)據(jù)可能是不一樣的。在一個(gè)事務(wù)內(nèi)兩次讀到的數(shù)據(jù)不一樣,就稱為不可重復(fù)讀。例如:事務(wù)T1讀取某表中數(shù)據(jù)A=20、B=30,求C=A+B,C=50,事務(wù)T1繼續(xù)往下執(zhí)行;事務(wù)T2讀取A=20,修改A=A*2,A=40;事務(wù)T1又一次讀取數(shù)據(jù)A=40、B=30,求C=A+B,C=70;所以,在事務(wù)T1內(nèi)兩次讀到的數(shù)據(jù)是不一樣的,即不可重復(fù)讀。10.2.1并發(fā)帶來(lái)的問(wèn)題(4)幻讀:與不可重復(fù)讀相似,是指當(dāng)事務(wù)不是獨(dú)立執(zhí)行時(shí)發(fā)生的一種現(xiàn)象。例如,第一個(gè)事務(wù)對(duì)一個(gè)表中的全部數(shù)據(jù)行都進(jìn)行了某種修改;同時(shí),第二個(gè)事務(wù)向表中插入了一行數(shù)據(jù)。那么,以后就會(huì)發(fā)生操作第一個(gè)事務(wù)的用戶發(fā)現(xiàn)表中還有沒(méi)有修改的數(shù)據(jù)行,就好像出現(xiàn)了幻覺(jué)一樣。當(dāng)對(duì)某條記錄執(zhí)行插入或刪除操作而該記錄屬于某個(gè)事務(wù)正在讀取的行的范圍時(shí),會(huì)發(fā)生幻讀問(wèn)題。10.2.2設(shè)置事務(wù)的隔離級(jí)別為了防止數(shù)據(jù)庫(kù)的并發(fā)操作導(dǎo)致的丟失修改、臟讀、不可重復(fù)度和幻讀等問(wèn)題,SQL標(biāo)準(zhǔn)定義了4類隔離級(jí)別。(1)讀取未提交數(shù)據(jù)(ReadUncommitted)在該隔離級(jí)別,所有事務(wù)都可以看到其他未提交事務(wù)的執(zhí)行結(jié)果。本隔離級(jí)別很少用于實(shí)際應(yīng)用,因?yàn)樗男阅芤膊槐绕渌?jí)別好多少。讀取未提交的數(shù)據(jù),也就是臟讀。10.2.2設(shè)置事務(wù)的隔離級(jí)別(2)讀取提交的數(shù)據(jù)(ReadCommitted)這是大多數(shù)數(shù)據(jù)庫(kù)系統(tǒng)的默認(rèn)隔離級(jí)別(但不是MySQL默認(rèn)的)。它滿足了隔離的簡(jiǎn)單定義,即一個(gè)事務(wù)只能看見(jiàn)已經(jīng)提交事務(wù)所做的改變。這種隔離級(jí)別支持所謂的不可重復(fù)讀,因?yàn)橥皇聞?wù)的其他實(shí)例在該實(shí)例處理其間可能會(huì)有新的提交結(jié)果,所以同一select可能返回不同結(jié)果。10.2.2設(shè)置事務(wù)的隔離級(jí)別(3)可重復(fù)讀(RepeatableRead)這是MySQL的默認(rèn)事務(wù)隔離級(jí)別,它確保同一事務(wù)的多個(gè)實(shí)例在并發(fā)讀取數(shù)據(jù)時(shí),會(huì)看到同樣的數(shù)據(jù)行。不過(guò)理論上,這會(huì)導(dǎo)致另一個(gè)棘手的問(wèn)題:幻讀。(4)可串行化(Serializable)這是最高的隔離級(jí)別,它通過(guò)強(qiáng)制事務(wù)排序,使之不可能相互沖突,從而解決幻讀問(wèn)題。簡(jiǎn)言之,它是在每個(gè)讀的數(shù)據(jù)行上加上共享鎖,事務(wù)順序執(zhí)行,沒(méi)有并行,完全杜絕幻讀。在這個(gè)級(jí)別,可能導(dǎo)致大量的超時(shí)現(xiàn)象和鎖競(jìng)爭(zhēng)。該隔離級(jí)別主要用于InnoDB存儲(chǔ)引擎的分布式事務(wù)。10.2.2設(shè)置事務(wù)的隔離級(jí)別MySQL的默認(rèn)隔離級(jí)別為RepeatableRead,在應(yīng)用程序具有更高或更低隔離級(jí)別的具體要求時(shí)才需要改動(dòng)。這種要求并沒(méi)有一個(gè)固定的標(biāo)準(zhǔn),一般是基于應(yīng)用程序的容錯(cuò)能力和開(kāi)發(fā)者對(duì)于潛在數(shù)據(jù)報(bào)錯(cuò)的影響的經(jīng)驗(yàn)判斷。10.2.3鎖簡(jiǎn)介鎖是實(shí)現(xiàn)并發(fā)控制的主要方法,是防止其他事務(wù)訪問(wèn)指定的資源、實(shí)現(xiàn)并發(fā)控制的一種手段,是多個(gè)用戶能夠同時(shí)操縱同一個(gè)數(shù)據(jù)庫(kù)中的數(shù)據(jù)而不發(fā)生數(shù)據(jù)不一致現(xiàn)象的重要保障。為了提高系統(tǒng)的性能、加快事務(wù)的處理速度、縮短事務(wù)的等待時(shí)間,應(yīng)該使鎖定的資源最小化。10.2.3鎖簡(jiǎn)介數(shù)據(jù)庫(kù)中的鎖是一種軟件機(jī)制,用來(lái)指示某個(gè)用戶已經(jīng)占用了某種資源,從而防止其他用戶做出影響本用戶的數(shù)據(jù)修改或?qū)е聰?shù)據(jù)庫(kù)數(shù)據(jù)的不完整性和不一致性。所謂資源,主要指用戶可以操作的數(shù)據(jù)行、數(shù)據(jù)表等。根據(jù)資源的不同,鎖有多粒度的概念,也就是指可以鎖定的資源的層次。MySQL中能夠鎖定的資源粒度主要包括:數(shù)據(jù)表級(jí)、頁(yè)級(jí)和行級(jí)等等。其中MyISAM存儲(chǔ)引擎采用表級(jí)鎖;InnoDB存儲(chǔ)引擎支持表級(jí)鎖和行級(jí)鎖,但默認(rèn)情況下采用行級(jí)鎖;DBD存儲(chǔ)引擎采用頁(yè)級(jí)鎖,但也支持表級(jí)鎖。10.2.3鎖簡(jiǎn)介表級(jí)鎖開(kāi)銷小加鎖快,不會(huì)出現(xiàn)死鎖,鎖定粒度大,發(fā)生鎖沖突的概率最高,并發(fā)度最低;行級(jí)鎖開(kāi)銷大加鎖慢,會(huì)出現(xiàn)死鎖,鎖定粒度最小,發(fā)生鎖沖突的概率最低,并發(fā)度也最高;頁(yè)級(jí)鎖開(kāi)銷和加鎖時(shí)間界于表鎖和行鎖之間,會(huì)出現(xiàn)死鎖,鎖定粒度界于表鎖和行鎖之間,并發(fā)度一般。僅從鎖的角度來(lái)說(shuō),表級(jí)鎖更適合于以查詢?yōu)橹鳎挥猩倭堪此饕龡l件更新數(shù)據(jù)的應(yīng)用,如Web應(yīng)用;行級(jí)鎖則更適合于有大量按索引條件并發(fā)更新少量不同數(shù)據(jù),同時(shí)又有并發(fā)查詢的應(yīng)用,如一些在線事務(wù)處理系統(tǒng)。10.2.4鎖的分類數(shù)據(jù)庫(kù)引擎使用不同類型的鎖鎖定資源,這些鎖確定了并發(fā)事務(wù)訪問(wèn)資源的方式。MyISAM的表鎖在執(zhí)行查詢操作(select)前,會(huì)自動(dòng)給涉及的所有表加讀鎖;在執(zhí)行更新操作(insert、update、delete等)前,會(huì)自動(dòng)給涉及的所有表加寫鎖。(1)讀鎖讀鎖又叫共享鎖(SharedLock,S鎖),該鎖允許并發(fā)事務(wù)讀?。⊿ELECT)一個(gè)資源。資源上存在S鎖時(shí),任何其它事務(wù)都不能修改數(shù)據(jù)。10.2.4鎖的分類(2)寫鎖寫鎖也叫排它鎖(ExclusiveLock,X鎖),該鎖可以防止并發(fā)事務(wù)對(duì)資源進(jìn)行訪問(wèn),其它事務(wù)不能讀取或修改X鎖鎖定的數(shù)據(jù)。即X鎖鎖定的資源只允許進(jìn)行鎖定操作的程序使用,其它任何對(duì)它的操作均不會(huì)被接受。執(zhí)行數(shù)據(jù)更新命令即INSERT、UPDATE或DELETE命令時(shí)MySQL會(huì)自動(dòng)使用X鎖,但當(dāng)對(duì)象上有其它鎖存在時(shí)無(wú)法對(duì)其加X(jué)鎖。MyISAM表的讀操作與寫操作之間、以及寫操作之間是串行的。10.2.4鎖的分類MyISAM在執(zhí)行查詢語(yǔ)句前,會(huì)自動(dòng)給涉及的所有表加讀鎖,在執(zhí)行更新操作前,會(huì)自動(dòng)給涉及的表加寫鎖,這個(gè)過(guò)程并不需要用戶干預(yù)。當(dāng)寫進(jìn)程和讀進(jìn)程同時(shí)請(qǐng)求同一個(gè)MyISAM表的寫鎖和讀鎖時(shí),寫進(jìn)程會(huì)優(yōu)先獲得鎖。即使讀請(qǐng)求先于寫請(qǐng)求到達(dá)鎖等待隊(duì)列,寫鎖也會(huì)插到讀鎖請(qǐng)求之前。因?yàn)镸ySQL認(rèn)為寫請(qǐng)求一般比讀請(qǐng)求更重要,所以MyISAM表不太適合有大量更新操作和查詢操作的應(yīng)用,因?yàn)榇罅康母虏僮鲿?huì)造成查詢操作很難獲得讀鎖,從而可能永遠(yuǎn)阻塞。10.2.4鎖的分類2.InnoDB的鎖InnoDB的行鎖有兩種:共享鎖(S)和排他鎖(X)。為了允許行鎖和表鎖共存,實(shí)現(xiàn)多粒度鎖機(jī)制,InnoDB還有兩種內(nèi)部使用的意向鎖:意向共享鎖(IS鎖)和意向排他鎖(IX鎖),這兩種意向鎖(IntentLock)都是表鎖。一個(gè)事務(wù)在給數(shù)據(jù)行加鎖之前必須先取得對(duì)應(yīng)表對(duì)應(yīng)的意向鎖。10.2.4鎖的分類(1)IS鎖IS鎖表示某事務(wù)有讀取低層次資源的意向,把S鎖放在這些低層次的單個(gè)資源上。也就是說(shuō),如果對(duì)一個(gè)數(shù)據(jù)對(duì)象加IS鎖,表示它的后裔資源擬(意向)加S鎖。例如,要對(duì)某個(gè)元組加S鎖,則要首先對(duì)包含該元組的表加IS鎖。(2)IX鎖IX鎖表示某事務(wù)有修改低層次資源的意向,把X鎖放在這些低層次的單個(gè)資源上。也就是說(shuō),如果對(duì)一個(gè)數(shù)據(jù)對(duì)象加IX鎖,表示它的后裔資源擬(意向)加X(jué)鎖。例如,要對(duì)某個(gè)元組加X(jué)鎖,則要首先對(duì)包含該元組的表加IX鎖。10.2.4鎖的分類對(duì)于InnoDB表,在絕大部分情況下都應(yīng)該使用行級(jí)鎖,但在個(gè)別特殊事務(wù)中,也可以考慮使用表級(jí)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030寵物保健品行業(yè)規(guī)模預(yù)測(cè)與投資前景策略建議分析研究報(bào)告
- 2025-2030天津市軌道交通行業(yè)市場(chǎng)發(fā)展分析及發(fā)展前景與投資研究報(bào)告
- 2025-2030國(guó)內(nèi)纖維素行業(yè)市場(chǎng)發(fā)展分析及競(jìng)爭(zhēng)格局與投資機(jī)會(huì)研究報(bào)告
- 2025-2030國(guó)內(nèi)消防設(shè)備行業(yè)市場(chǎng)發(fā)展分析及競(jìng)爭(zhēng)格局與投資前景研究報(bào)告
- 2025-2030商用車租賃行業(yè)市場(chǎng)現(xiàn)狀供需分析及重點(diǎn)企業(yè)投資評(píng)估規(guī)劃分析研究報(bào)告
- 2025-2030合成橡膠行業(yè)市場(chǎng)深度調(diào)研及前景趨勢(shì)與投資戰(zhàn)略研究報(bào)告
- 2025-2030取暖電器行業(yè)市場(chǎng)現(xiàn)狀供需分析及投資評(píng)估規(guī)劃分析研究報(bào)告
- 2025-2030雙面柔性印刷電路板(FPC)行業(yè)市場(chǎng)現(xiàn)狀供需分析及投資評(píng)估規(guī)劃分析研究報(bào)告
- 2025-2030廚具行業(yè)市場(chǎng)現(xiàn)狀供需分析及投資評(píng)估規(guī)劃分析研究報(bào)告
- 2025-2030即時(shí)通訊行業(yè)深度調(diào)研及競(jìng)爭(zhēng)格局與投資價(jià)值研究報(bào)告
- DB6110-T 039-2023 桔梗栽培技術(shù)規(guī)范
- 部編版初中語(yǔ)文文言文主題分類梳理1
- 第8課 用制度體系保證人民當(dāng)家做主
- 砂子檢驗(yàn)報(bào)告-焦化
- 六年級(jí)合作取得更大的成功辯論
- 執(zhí)業(yè)獸醫(yī)機(jī)構(gòu)聘用證明或服務(wù)協(xié)議
- 卓越績(jī)效調(diào)研提綱
- 【經(jīng)典】一次性使用氧氣濕化瓶-一次性使用加濕型鼻氧管介紹教學(xué)課件
- 建筑施工企業(yè)預(yù)結(jié)算制度
- 2023年中央民族大學(xué)事業(yè)編制人員招聘(共500題含答案解析)筆試歷年難、易錯(cuò)考點(diǎn)試題含答案附詳解
- 托管中心消防應(yīng)急預(yù)案
評(píng)論
0/150
提交評(píng)論