版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第10章
事務(wù)管理和多用戶操作——事
務(wù)01事務(wù)的概念事務(wù)的概念在MySQL環(huán)境中,事務(wù)由一個(gè)單獨(dú)單元的一個(gè)或多個(gè)SQL語(yǔ)句組成。這個(gè)單元中的SQL語(yǔ)句是互相依賴的,而單元作為一個(gè)整體是不可分割的。如果單元中的一個(gè)語(yǔ)句不能完成,整個(gè)單元就會(huì)回滾(撤銷(xiāo)),所有影響到的數(shù)據(jù)將返回到事務(wù)開(kāi)始以前的狀態(tài)。因而,只有事務(wù)中的所有語(yǔ)句都成功地執(zhí)行才能說(shuō)明這個(gè)事務(wù)被成功地執(zhí)行。例如:在學(xué)生成績(jī)數(shù)據(jù)庫(kù)(xscj)中,下列情況都是一個(gè)完整的事務(wù)。(1)刪除一個(gè)學(xué)生及格以上的成績(jī)和減少對(duì)應(yīng)的總學(xué)分。(2)修改一個(gè)成績(jī)(從不及格到及格以上)需要增加學(xué)生的總學(xué)分。(3)修改一個(gè)成績(jī)(從及格以上到不及格)需要減少學(xué)生的總學(xué)分。(4)刪除學(xué)生記錄的同時(shí)需要?jiǎng)h除該學(xué)生的所有成績(jī)記錄。(5)刪除課程記錄的同時(shí)需要?jiǎng)h除該課程的所有成績(jī)記錄。02ACID屬性原子性一致性隔離性持久性ACID屬性1.原子性原子性指事務(wù)是數(shù)據(jù)庫(kù)工作的最小單位,一個(gè)事務(wù)中的所有操作要么全部成功提交,要么全部失敗回滾。例如:插入一個(gè)學(xué)生及格以上成績(jī)和增加對(duì)應(yīng)學(xué)生的總學(xué)分這兩個(gè)操作要么同時(shí)成功要么同時(shí)失敗,故應(yīng)在同一個(gè)事務(wù)中。2.一致性一致性指事務(wù)操作不能破壞數(shù)據(jù)的一致性,數(shù)據(jù)庫(kù)在一個(gè)事務(wù)的執(zhí)行前后都應(yīng)處于一致?tīng)顟B(tài)。例如:假設(shè)在插入學(xué)生成績(jī)后數(shù)據(jù)庫(kù)發(fā)生故障(例如宕機(jī))則事務(wù)被迫中斷,但修改學(xué)生總學(xué)分未完成,已經(jīng)寫(xiě)入數(shù)據(jù)庫(kù)的成績(jī)記錄就會(huì)破壞與學(xué)生總學(xué)分?jǐn)?shù)據(jù)的一致性。ACID屬性3.隔離性隔離性指數(shù)據(jù)庫(kù)并發(fā)情況下,并發(fā)的事務(wù)之間是隔離的,一個(gè)事務(wù)的執(zhí)行不能被其他事務(wù)影響。隔離性比較復(fù)雜,在本節(jié)后面專門(mén)介紹。4.持久性持久性指一旦事務(wù)提交,則其對(duì)數(shù)據(jù)的變更就是永久性的,即使數(shù)據(jù)庫(kù)發(fā)生任何故障都不應(yīng)該對(duì)數(shù)據(jù)造成影響。例如:插入一個(gè)學(xué)生及格以上成績(jī)和增加對(duì)應(yīng)學(xué)生的總學(xué)分這兩個(gè)操作事務(wù)已經(jīng)完成,但數(shù)據(jù)庫(kù)故障,仍然要保證兩個(gè)操作結(jié)果正確并保存到數(shù)據(jù)庫(kù)中。03事
務(wù)
處
理開(kāi)始事務(wù)結(jié)束事務(wù)撤銷(xiāo)事務(wù)和回滾事務(wù)事務(wù)處理1.開(kāi)始事務(wù)STARTTRANSACTION|BEGINWORK2.結(jié)束事務(wù)使得自從事務(wù)開(kāi)始以來(lái)所執(zhí)行的所有修改成為數(shù)據(jù)庫(kù)的永久部分,也標(biāo)記一個(gè)事務(wù)的結(jié)束。COMMIT[AND[NO]CHAIN][[NO]RELEASE]說(shuō)明:(1)可選的ANDCHAIN子句會(huì)在當(dāng)前事務(wù)結(jié)束時(shí)立刻啟動(dòng)一個(gè)新事務(wù),并且新事務(wù)與剛結(jié)束的事務(wù)有相同的隔離級(jí)。(2)RELEASE子句在終止了當(dāng)前事務(wù)后,會(huì)讓服務(wù)器斷開(kāi)與當(dāng)前客戶端的連接。包含NO關(guān)鍵字可以抑制CHAIN或RELEASE完成。事務(wù)處理3.撤銷(xiāo)事務(wù)和回滾事務(wù)(1)撤銷(xiāo)事務(wù)所做的修改,并結(jié)束當(dāng)前這個(gè)事務(wù)。ROLLBACK[AND[NO]CHAIN][[NO]RELEASE]選項(xiàng)功能同結(jié)束事務(wù)(COMMIT)。(2)可以不撤銷(xiāo)事務(wù)所有操作,而是回滾到一個(gè)事務(wù)的保存點(diǎn)。當(dāng)然,此前在事務(wù)中需要設(shè)置保存點(diǎn),設(shè)置語(yǔ)句如下:SAVEPOINT保存點(diǎn)名如果在保存點(diǎn)被設(shè)置后,當(dāng)前事務(wù)對(duì)數(shù)據(jù)進(jìn)行了更改,則這些更改會(huì)在回滾到保存點(diǎn)時(shí)被撤銷(xiāo)。事務(wù)處理(3)刪除指定的保存點(diǎn)RELEASESAVEPOINT保存點(diǎn)名它從當(dāng)前事務(wù)的一組保存點(diǎn)中刪除指定的保存點(diǎn)。如果指定的保存點(diǎn)不存在,則會(huì)出現(xiàn)錯(cuò)誤。下面幾個(gè)語(yǔ)句說(shuō)明了有關(guān)事務(wù)的處理過(guò)程:1.STARTTRANSACTION2.UPDATE…3.DELETE…4.SAVEPOINTS1;5.DELETE…6.ROLLBACKWORKTOSAVEPOINTS1;7.INSERT…8.COMMITWORK;04事務(wù)應(yīng)用實(shí)例含事務(wù)編程執(zhí)行含事務(wù)程序事務(wù)功能測(cè)試事務(wù)應(yīng)用實(shí)例【例】創(chuàng)建包含事務(wù)的存儲(chǔ)過(guò)程,插入學(xué)生課程成績(jī)。1.含事務(wù)編程創(chuàng)建一個(gè)存儲(chǔ)過(guò)程input_cj,插入一個(gè)學(xué)生成績(jī)。USExscj;DROPPROCEDUREIFEXISTSinput_cj;DELIMITER$$CREATEPROCEDUREinput_cj(INxhchar(6),INkchchar(3),INcjint)BEGIN DECLARExfint(1); #(a) DECLAREtransErrintDEFAULT0; #(b.1) DECLARECONTINUEHANDLERFORSQLEXCEPTIONSETtransErr=1; #(b.2)
STARTTRANSACTION; #(b.3) SELECT學(xué)分INTOxfFROMkcWHERE課程號(hào)=kch; #(c.1) INSERTINTOcjVALUES(xh,kch,xf); #(c.2) SELECTSLEEP(10); #(d) IFcj>=60THEN #(c.3) UPDATExsSET總學(xué)分=總學(xué)分+xfWHERE學(xué)號(hào)=xh; #(c.3) ENDIF; IFtransErr=1THEN #(b.4)
ROLLBACK; #(b.4) SELECT'成績(jī)插入不成功!'; ELSE #(b.5) COMMIT; #(b.5) SELECT'成績(jī)插入成功!'; ENDIF;END$$DELIMITER;事務(wù)應(yīng)用實(shí)例說(shuō)明:(a)局部變量xf:存放kch對(duì)應(yīng)課程學(xué)分。(b)事務(wù)處理:定義SQL事務(wù)出錯(cuò)局部變量(transErr),初始值為0(b.1);定義SQL事務(wù)出錯(cuò)處理方法(CONTINUE:繼續(xù)運(yùn)行),并且執(zhí)行“SETtransErr=1”語(yǔ)句(b.2);開(kāi)始事務(wù)(b.3);如果SQL事務(wù)出錯(cuò),回滾到事務(wù)前狀態(tài)(b.4);否則事務(wù)提交確認(rèn)(b.5)。(c)存儲(chǔ)過(guò)程功能:查詢kch對(duì)應(yīng)課程學(xué)分(c.1);插入成績(jī)記錄(c.2);如果成績(jī)cj大于等于60,學(xué)生表對(duì)應(yīng)xh學(xué)生的總學(xué)分加課程學(xué)分(c.3)。(d)等待10s,如果MySQL數(shù)據(jù)庫(kù)不在本機(jī),可以在這期間斷開(kāi)本機(jī)網(wǎng)絡(luò)來(lái)模擬網(wǎng)絡(luò)故障,這時(shí)INSERT語(yǔ)句已經(jīng)執(zhí)行,而UPDATE沒(méi)有執(zhí)行。事務(wù)應(yīng)用實(shí)例2.執(zhí)行含事務(wù)程序SET@@sql_mode='STRICT_TRANS_TABLES'; #(a)SET@@AUTOCOMMIT=0; #(b)USExscj;CALLinput_cj('201101','302',86); #(c)CALLinput_cj('201188','302',70); #(d)說(shuō)明:(a)設(shè)置系統(tǒng)為嚴(yán)格模式,使不合法數(shù)據(jù)不能插入(b)事務(wù)處理程序(SET@@AUTOCOMMIT=0):使SQL語(yǔ)句對(duì)數(shù)據(jù)庫(kù)所做的修改持久化。(c)調(diào)用存儲(chǔ)過(guò)程input_cj()。操作結(jié)果顯示“成績(jī)插入成功!”。(d)調(diào)用存儲(chǔ)過(guò)程input_cj()。操作結(jié)果顯示“成績(jī)插入不成功!”。事務(wù)應(yīng)用實(shí)例3.事務(wù)功能測(cè)試修改存儲(chǔ)過(guò)程體如下:BEGIN DECLARExfint(1); #(a)DECLAREEXITHANDLERFORSQLEXCEPTIONROLLBACK; #(b.2)
STARTTRANSACTION; #(b.3) SELECT學(xué)分INTOxfFROMkcWHERE課程號(hào)=kch; #(c.1) INSERTINTOcjVALUES(xh,kch,xf); #(c.2) SELECTSLEEP(10); #(d) IFcj>=60THEN #(c.3) UPDATExsSET總學(xué)分=總學(xué)分+xfWHERE學(xué)號(hào)=xh; #(c.3) ENDIF; COMMIT;
SELECT'成績(jī)插入成功!';END$$05事務(wù)隔離級(jí)事務(wù)隔離級(jí)基于ANSI/ISOSQL規(guī)范,MySQL提供了4種隔離級(jí),語(yǔ)句如下。SET[GLOBAL|SESSION]TRANSACTIONISOLATIONLEVELSERIALIZABLE |REPEATABLEREAD |READCOMMITTED |READUNCOMMITTED說(shuō)明:(1)隔離級(jí)選項(xiàng)如下。SERIALIZABLE(序列化):用戶之間通過(guò)一個(gè)接一個(gè)順序地執(zhí)行當(dāng)前的事務(wù)提供事務(wù)之間最大限度的隔離。REPEATABLEREAD(可重復(fù)讀)(系統(tǒng)默認(rèn)):事務(wù)不會(huì)被看作一個(gè)序列,但當(dāng)前執(zhí)行事務(wù)時(shí)的變化仍然不能看到,也就是說(shuō),如果用戶在同一個(gè)事務(wù)中執(zhí)行同條SELECT語(yǔ)句數(shù)次,結(jié)果總是相同的。READCOMMITTED(提交讀):隔離級(jí)的安全性比可重復(fù)讀要差。不僅處于這一級(jí)的事務(wù)可以看到其他事務(wù)添加的新記錄,而且其他事務(wù)對(duì)現(xiàn)存記錄做出的修改一旦被提交,也可以看到。READUNCOMMITTED(未提交讀):提供了事務(wù)之間最小限度的隔離。事務(wù)隔離級(jí)當(dāng)用戶從無(wú)保護(hù)的未提交讀隔離級(jí)轉(zhuǎn)移到更安全的序列化隔離級(jí)時(shí),RDBMS的性能也要受到影響。原因很簡(jiǎn)單:用戶要求系統(tǒng)提供越強(qiáng)的數(shù)據(jù)完整性,它就越需要做更多的工作,運(yùn)行的速度也就越慢。圖中列出了事務(wù)隔離級(jí)和性能之間的關(guān)系。事務(wù)隔離級(jí)(2)如果指定GLOBAL,那么定義的隔離級(jí)將適用于所有的用戶;如果指定SESSION,則隔離級(jí)只適用于當(dāng)前運(yùn)行的會(huì)話和連接。(3)系統(tǒng)變量@@TX_ISOLATION中存儲(chǔ)了事務(wù)的隔離級(jí),默認(rèn)情況下,這個(gè)系統(tǒng)變量的值是基于每個(gè)會(huì)話設(shè)置的,但是可以通過(guò)向SET命令行添加GLOBAL關(guān)鍵字修改該全局系統(tǒng)變量的值。(4)只有支持事務(wù)的存儲(chǔ)引擎才可以定義隔離級(jí)。定義隔離級(jí)可以使用SETTRANSACTION語(yǔ)句。第10章
事務(wù)管理和多用戶操作——多
用
戶01鎖定的級(jí)別鎖定的級(jí)別對(duì)于不同的表類(lèi)型,鎖定機(jī)制也是不同的,因此理解不同級(jí)的鎖定是使用MySQL的非事務(wù)表實(shí)現(xiàn)偽事務(wù)環(huán)境的基本條件。表鎖定:一個(gè)特殊類(lèi)型的訪問(wèn),整個(gè)表被用戶鎖定。其他用戶不能向表中插入記錄,甚至從中讀數(shù)據(jù)也受到限制。頁(yè)鎖定:MySQL將鎖定表中的某些行(稱作頁(yè))。被鎖定的行只對(duì)鎖定最初的線程是可寫(xiě)的。如果另外一個(gè)線程想要向這些行寫(xiě)數(shù)據(jù),它必須等到鎖被釋放。不過(guò),其他頁(yè)的行仍然可以使用。行鎖定:行鎖定比表鎖定或頁(yè)鎖定對(duì)鎖定過(guò)程提供了更精細(xì)的控制。在這種情況下,只有線程使用的行是被鎖定的,表中的其他行對(duì)于其他線程都是可用的。在多用戶環(huán)境中,行鎖定降低了線程間的沖突,可以使多個(gè)用戶同時(shí)從一個(gè)相同表讀數(shù)據(jù)甚至寫(xiě)數(shù)據(jù)。死鎖:如果很多用戶同時(shí)訪問(wèn)數(shù)據(jù)庫(kù),一個(gè)常見(jiàn)的現(xiàn)象就是死鎖。簡(jiǎn)單地說(shuō),如果兩個(gè)用戶相互等待對(duì)方的數(shù)據(jù),就會(huì)產(chǎn)生一個(gè)死鎖。假設(shè)用戶U1在R1行上定義了一個(gè)鎖,并且希望在R2行上也放置一個(gè)鎖,而用戶U2是R2行上的一個(gè)鎖的擁有者,并且希望在R1行上也放置一個(gè)鎖,則這兩個(gè)用戶相互等待產(chǎn)生死鎖。02鎖定的級(jí)別全局鎖表鎖行鎖鎖定與解鎖1.全局鎖全局鎖就是對(duì)整個(gè)數(shù)據(jù)庫(kù)實(shí)例加鎖,一般用于全庫(kù)邏輯備份。全局鎖讓整個(gè)數(shù)據(jù)庫(kù)(所有表)處于只讀狀態(tài),使用這個(gè)命令后,數(shù)據(jù)庫(kù)表的增刪改(DML)、表結(jié)構(gòu)的更改(DDL)、更新事務(wù)的提交都會(huì)被阻塞,但查詢是允許的。MySQL采用下列語(yǔ)句加全局鎖(FTWRL)。FLUSHTABLEWITHREADLOCK;當(dāng)需要讓整個(gè)庫(kù)處于只讀狀態(tài)的時(shí)候,就可以使用這個(gè)命令,之后所有線程的更新操作都會(huì)被阻塞。下列語(yǔ)句釋放所有鎖:UNLOCKTABLES;但若在執(zhí)行FTWRL命令之后由于客戶端發(fā)生異常而斷開(kāi),MySQL會(huì)自動(dòng)釋放這個(gè)全局鎖,整個(gè)庫(kù)可以回到正常更新的狀態(tài)。鎖定與解鎖【例】全局鎖測(cè)試。打開(kāi)test數(shù)據(jù)庫(kù)中的sp表,在瀏覽時(shí)增加、修改或刪除表中記錄,保存時(shí)系統(tǒng)就會(huì)顯示錯(cuò)誤信息。例如:FLUSHTABLEWITHREADLOCK;USEtest;INSERTINTOspVALUES(3,38.50);顯示錯(cuò)誤信息如圖。釋放所有鎖,插入2條記錄:UNLOCKTABLES;INSERTINTOspVALUES(3,38.50);INSERTINTOspVALUES(4,19.00);鎖定與解鎖2.表鎖在執(zhí)行修改表的的時(shí)候,一般都會(huì)給表加上表鎖,可以避免一些不同步的事情出現(xiàn)。表鎖分為兩種,一種是讀鎖,一種是寫(xiě)鎖。1)讀鎖寫(xiě)鎖效果加讀鎖(共享鎖):LOCKTABLES表名READ其中,READ為加讀鎖。(1)加讀鎖的這個(gè)進(jìn)程可以讀(如SELECT)加讀鎖的表,但是不能讀其他的表。(2)加讀鎖的這個(gè)進(jìn)程不能更新(UPDATE、DELETE)加讀鎖的表。(3)其他進(jìn)程可以讀加讀鎖的表(因?yàn)槭枪蚕礞i),也可以讀其他表。其他進(jìn)程更新加讀鎖的表會(huì)一直處于等待鎖的狀態(tài),直到鎖被釋放后才會(huì)更新成功。加寫(xiě)鎖(獨(dú)占鎖):LOCKTABLES表名WRITE(1)加鎖進(jìn)程可以對(duì)加鎖的表做任何操作(CURD)。(2)其他進(jìn)程則不能查詢加鎖的表,需等待鎖釋放。鎖定與解鎖2)隱含加和釋放表鎖當(dāng)要對(duì)表做結(jié)構(gòu)變更的時(shí)候,自動(dòng)加寫(xiě)鎖。表加鎖不僅會(huì)限制其他線程的讀寫(xiě),也會(huì)限制本線程接下來(lái)的操作。在客戶端斷開(kāi)的時(shí)候自動(dòng)釋放表鎖。3)查看加鎖的表SHOWOPENTABLES4)分析加鎖的表信息SHOWSTATUSLIKE'TABLE%'其中:Table_locks_immediate:產(chǎn)生表鎖定的次數(shù),每立即獲取鎖值加1。Table_locks_waited:出現(xiàn)表鎖定爭(zhēng)用而發(fā)生等待的次數(shù)(不能立即獲取鎖的次數(shù),每等待一次鎖值加1),此值高則說(shuō)明存在著較嚴(yán)重的表鎖爭(zhēng)用情況。鎖定與解鎖【例】表鎖測(cè)試。(1)在當(dāng)前會(huì)話查詢窗口執(zhí)行下列語(yǔ)句。USEtest;LOCKTABLESspREAD;SELECT*FROMsp; #(a)UPDATEspSETprice=price*0.9 WHEREid=2; #(b)運(yùn)行時(shí)可以執(zhí)行SELECT語(yǔ)句,不能執(zhí)行UPDATE語(yǔ)句(顯示錯(cuò)誤),如圖。
鎖定與解鎖(2)在當(dāng)前會(huì)話查詢窗口執(zhí)行下列語(yǔ)句。USEtest;LOCKTABLESspWRITE;UPDATEspSETprice=price*0.9 WHEREid=2;SELECT*FROMsp;可以運(yùn)行UPDATE語(yǔ)句和SELECT語(yǔ)句,如圖。此時(shí)在另一個(gè)會(huì)話查詢窗口,執(zhí)行下列語(yǔ)句查詢sp表記錄將處于等待狀態(tài)。SELECT*FROMtest.sp;(3)在當(dāng)前會(huì)話查詢窗口執(zhí)行下列語(yǔ)句。USEtest;UNLOCKTABLES;鎖定與解鎖3.行鎖行鎖偏向InnoDB存儲(chǔ)引擎,開(kāi)銷(xiāo)大、加鎖慢;會(huì)出現(xiàn)死鎖;鎖定粒度最小,發(fā)生鎖沖突的概率最低,并發(fā)度也最高。不支持行鎖的存儲(chǔ)引擎意味著并發(fā)控制只能使用表鎖,同一張表任何時(shí)刻只能有一個(gè)更新在執(zhí)行,這就會(huì)影響到業(yè)務(wù)并發(fā)度。一個(gè)事務(wù)不管持有幾個(gè)行鎖,都是在執(zhí)行COMMIT的時(shí)候才一起釋放。在InnoDB事務(wù)中,行鎖在需要的時(shí)候才加上,比如一個(gè)事務(wù)有n1行和n2行兩個(gè)UPDATE語(yǔ)句,行鎖是在執(zhí)行到n1行和n2行UPDATE語(yǔ)句時(shí)才分別加上的,且也不是語(yǔ)句執(zhí)行后就立刻釋放,而是等到事務(wù)結(jié)束時(shí)才一起釋放,這就是兩階段鎖協(xié)議。InnoDB的行鎖是針對(duì)索引加的鎖,只要更新條件與索引項(xiàng)一致,對(duì)記錄加行鎖是系統(tǒng)自動(dòng)進(jìn)行的。鎖定與解鎖【例】行鎖測(cè)試。當(dāng)前有兩個(gè)會(huì)話對(duì)數(shù)據(jù)庫(kù)sp表相同(id=1)的記錄進(jìn)行修改,但修改的@myprice值是不同會(huì)話輸入的。1)運(yùn)行測(cè)試先執(zhí)行下列語(yǔ)句,設(shè)置id=2價(jià)格:USEtest;UPDATEspSETprice=40WHEREid=2;2)創(chuàng)建兩個(gè)查詢編輯窗口,分別輸入會(huì)話1事務(wù)和會(huì)話2事務(wù)程序:會(huì)話1事務(wù):USEtest;STARTTRANSACTION;SELECT*FROMsp WHEREid=2; #(a.1)SET@myprice=38.00; #(b.1)UPDATEspSETprice=@mypriceWHEREid=2;SELECTSLEEP(10); #(c.1)COMMIT;SELECT*FROMsp WHEREid=2; #(d.1)鎖定與解鎖會(huì)話2事務(wù):USEtest;STARTTRANSACTION;SELECT*FROMsp WHEREid=2; #(a.2)SET@myprice=46.00; #(b.2)UPDATEspSETprice=@mypriceWHEREid=2;SELECTSLEEP(1); #(c.2)COMMIT;SELECT*FROMsp WHEREid=2; #(d.2)說(shuō)明:(a)查詢進(jìn)入事務(wù)前的2號(hào)商品價(jià)格(price)。(b)用變量賦不同值模擬不同用戶運(yùn)行這個(gè)程序時(shí)輸入2號(hào)商品不同價(jià)格。(c)模擬不同用戶在不同操作時(shí)網(wǎng)絡(luò)數(shù)據(jù)庫(kù)時(shí)間差異。SLEEP(10)等待10s,這樣就可觀察到會(huì)話1事務(wù)執(zhí)行沒(méi)有完成,會(huì)話1只能等待的情況。(d)查詢進(jìn)入事務(wù)完成后的2號(hào)商品價(jià)格(price)。鎖定與解鎖3)先執(zhí)行會(huì)話1程序,再執(zhí)行會(huì)話2程序。如圖。鎖定與解鎖4)運(yùn)行結(jié)果及分析會(huì)話1進(jìn)程:a.1處顯示id=2,price=40;d.1處顯示id=2,price=38。會(huì)話2進(jìn)程:a.1處顯示id=2,price=40;d.1處顯示id=2,price=46。盡管會(huì)話2進(jìn)程比會(huì)話1進(jìn)程遲幾秒運(yùn)行,但由于會(huì)話1進(jìn)程修改id=2記錄的事務(wù)沒(méi)有提交前處于鎖定狀態(tài),所以會(huì)話2進(jìn)程a.1處讀取的不是會(huì)話1進(jìn)程修改后的值,而是與會(huì)話1進(jìn)程進(jìn)入事務(wù)前的值相同。而d.1和d.2為各自進(jìn)程修改的值。但是,如果注釋c.2語(yǔ)句使會(huì)話2進(jìn)程在此處不延時(shí),則有可能d.1也顯示id=2,price=46。03死
鎖死鎖如果事務(wù)A和事務(wù)B操作同一個(gè)數(shù)據(jù)庫(kù)中的同一個(gè)表,事務(wù)A在等待事務(wù)B釋放id=2的行鎖,而事務(wù)B在等待事務(wù)A釋放id=1的行鎖,事務(wù)A和事務(wù)B在互相等待對(duì)方的資源釋放,于是進(jìn)入了死鎖狀態(tài)。如表。
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版公司承包合同參考范本
- 2025別墅裝修工程現(xiàn)場(chǎng)清理與勞務(wù)分包合同3篇
- 2025年度文化旅游綜合體承包設(shè)計(jì)工程合同4篇
- 2025年度書(shū)房軟裝承接合同樣本12篇
- 非計(jì)劃性拔管相關(guān)知識(shí)考核試題
- 2024版特許經(jīng)營(yíng)協(xié)議:快餐連鎖品牌授權(quán)
- 2025年農(nóng)業(yè)大棚租賃與農(nóng)業(yè)產(chǎn)業(yè)園區(qū)建設(shè)合同4篇
- 2025年度新型城鎮(zhèn)化代付工程款三方協(xié)議4篇
- 2025年度合同封面定制與知識(shí)產(chǎn)權(quán)戰(zhàn)略布局合同3篇
- 2025年度水庫(kù)魚(yú)塘漁業(yè)養(yǎng)殖與市場(chǎng)拓展承包合同3篇
- CT設(shè)備維保服務(wù)售后服務(wù)方案
- 重癥血液凈化血管通路的建立與應(yīng)用中國(guó)專家共識(shí)(2023版)
- 兒科課件:急性細(xì)菌性腦膜炎
- 柜類(lèi)家具結(jié)構(gòu)設(shè)計(jì)課件
- 陶瓷瓷磚企業(yè)(陶瓷廠)全套安全生產(chǎn)操作規(guī)程
- 煤炭運(yùn)輸安全保障措施提升運(yùn)輸安全保障措施
- JTGT-3833-2018-公路工程機(jī)械臺(tái)班費(fèi)用定額
- 保安巡邏線路圖
- (完整版)聚乙烯課件
- 建筑垃圾資源化綜合利用項(xiàng)目可行性實(shí)施方案
- 大華基線解碼器解碼上墻的操作
評(píng)論
0/150
提交評(píng)論