更新時(shí)間:2020-07-29 14:29:22 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2473次
數(shù)據(jù)庫(kù)是一個(gè)軟件,是一個(gè)很多用戶會(huì)一起使用的軟件。
當(dāng)多個(gè)用戶同時(shí)的去操作數(shù)據(jù)庫(kù)中數(shù)據(jù)的時(shí)候,在數(shù)據(jù)庫(kù)中就會(huì)產(chǎn)生多個(gè)用戶去存取同一條數(shù)據(jù)的情況。如果兩個(gè)或多個(gè)以上的用戶在執(zhí)行的過(guò)程中,因爭(zhēng)奪資源導(dǎo)致互相等待,并且將一直等待下去,這種情況叫做死鎖。
產(chǎn)生死鎖的條件
一條數(shù)據(jù)每次只能被一個(gè)用戶使用;
一個(gè)用戶請(qǐng)求資源阻塞時(shí),對(duì)已經(jīng)獲得的資源保持不放;
用戶已經(jīng)獲得的資源,未使用前,別人不能搶走;
幾個(gè)用戶形成首尾相接的循環(huán)等待資源。
幾個(gè)條件同時(shí)發(fā)生的時(shí)候,就會(huì)產(chǎn)生死鎖。
比如小明和小紅都要做飯,做飯需要鏟子和鍋(假如鏟子和鍋各有一個(gè))。
小明拿到了鏟子,準(zhǔn)備去找鍋;
小紅拿到了鍋,準(zhǔn)備去找鏟子;
然后他/她倆就僵持住了,每個(gè)人都拿著手上的東西不放手,于是就一直僵持下去了。
數(shù)據(jù)庫(kù)鎖類型
排它鎖(X鎖):鎖上之后,其他用戶不能對(duì)其查詢和修改。
共享鎖(S鎖):鎖上之后,其他用戶可以查詢,但是不能修改。
常見(jiàn)的產(chǎn)生死鎖的原因
對(duì)相同的資源,訪問(wèn)順序不相同:這個(gè)好理解吧,上面那個(gè)例子就是這個(gè)問(wèn)題。小明做飯先找鏟子后找鍋,小紅做飯先找鍋后找鏟子。解決的方法也比較簡(jiǎn)單,就是讓他們的順序保持一致就好了。
索引失效:有時(shí)候索引失效導(dǎo)致查詢進(jìn)行了全表掃描,執(zhí)行全表掃描,會(huì)把行級(jí)鎖上升為表級(jí)鎖,如果這樣的事情發(fā)生次數(shù)太多,就很容易導(dǎo)致死鎖。解決方法也很簡(jiǎn)單啦,別讓索引失效就好了。產(chǎn)生索引失效的原因也有很多,之前我有介紹過(guò)。
并發(fā)修改同一記錄:用戶A先查詢一條數(shù)據(jù),上了共享鎖,這時(shí)候用戶B要修改數(shù)據(jù),上了獨(dú)占鎖,賴好不好的,A也要做數(shù)據(jù)修改了,那么共享鎖企圖上升為獨(dú)占鎖。這時(shí)候,用戶B的獨(dú)占鎖要等著A釋放共享鎖,但是A要做鎖升級(jí),還必須等待B釋放獨(dú)占鎖,于是出現(xiàn)了死鎖。數(shù)據(jù)庫(kù)解決這種問(wèn)題,引入了悲觀鎖和樂(lè)觀鎖。這里就不展開(kāi)來(lái)說(shuō)了。
以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“Java數(shù)據(jù)庫(kù)項(xiàng)目視頻,數(shù)據(jù)庫(kù)為什么會(huì)產(chǎn)生死鎖”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743