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