【資料庫——鎖】
前言:
你把它不放在心上,你就永遠不清楚它。這是這個階段自己最深刻的體會,當我們學習知識的時候,就是要親密的接觸它,這樣收穫的知識才是自己的!
核心:
首先先來了解一下事務的缺陷:
一、事務的缺陷
1.丟失更新(lose update)
兩個程式都是先讀取後更新,一個程式不知道另一個程式的存在,一個程式可能會覆蓋另一個程式的更新。
2.髒讀(dirty read)
是指讀未提交的資料。一個程式更新了資料但在另一個程式讀取相同的資料前未提交的更新。
3.不可重複讀(unrepeateable read)
也稱為不一致的分析,同一個事務的兩次讀取中,程式讀取相同的資源得到不同的值。
4.幻讀(Phantom Read)
當事務不是獨立執行時發生的一種現象。A事務修改了資料,B事務也修改了資料,事務提交後,A事務的使用者發現表中還沒有被修改的資料行,好像發生了幻覺一樣。
為了防止這些問題,引入資料庫併發控制技術。鎖是併發控制技術的一種。由此引出了鎖,接下來,我們一起來看看鎖。
二、鎖的概念
鎖的基本原則:允許一個事務更新資料。
三、鎖的類別
1.共享鎖(shared lock,S):
情景:用於不更改資料的操作(只讀操作)
特點:可以被其他使用者讀取,但無法被其他使用者修改。
2.更新鎖(update lock,U):
情景:用於可能被更新的資源中,防止多個事務在讀取、鎖定以及隨後可能進行的更新操作時發生死鎖。
特點:同一時刻只能有一個事務可以獲得資源的更新鎖。
3.排他鎖(exclusive lock,X):
情景:用於資料修改操作。
特點:與所有鎖模式互斥,以確保不會同時對同一資源進行多重更新。
4.意向鎖(intent lock):
情景:用於建立鎖的層次結構
特點:獲取共享鎖或排他鎖
5.架構鎖(Schema locks):
情景:在執行依賴於表架構的操作時使用
6.大容量更新鎖(bulk update lock,BU):
特點:允許多個會話向表中大容量載入資料,同時阻塞程式對該表執行大容量載入以外的操作。
四、死鎖及其防止
處理死鎖的最好方法,防止死鎖的發生。需要遵循的原則:
1.儘量避免併發的執行涉及到資料庫修改資料的語句(少併發修語句)
2.要求每個事務一次就將所有要使用的資料全部加鎖,否則就不予執行(一次加鎖)
3.預先規定一個加鎖的順序。所有的事務,都必須按這個順序對資料進行加鎖。(規定加鎖順序)
4.每個事務的執行時間不可太長,儘量縮短事務的邏輯處理過程,及早提交或回滾事務。對程式段長的事務可以考慮將其分割為幾個事務。(縮短處理過程)
5.對一般不要修改的SQL Server事務的預設級別。不推薦強加鎖。(預設級別)
總結:
不斷總結中,感謝大家的閱讀!
相關文章
- 資料庫鎖機制資料庫
- oracle 資料庫的鎖Oracle資料庫
- 資料庫中的共享鎖與排他鎖資料庫
- MySQL資料庫鎖介紹MySql資料庫
- MySQL資料庫-鎖詳解MySql資料庫
- 轉載oracle資料庫鎖Oracle資料庫
- 資料庫鎖表與阻塞資料庫
- postgresql資料庫鎖介紹SQL資料庫
- 資料庫是如何使用鎖資料庫
- 資料庫被鎖問題資料庫
- 即刻殺死資料庫鎖資料庫
- Oracle資料庫資料鎖機制解析(zt)Oracle資料庫
- 資料庫篇:mysql鎖詳解資料庫MySql
- 資料庫之鎖的實踐資料庫
- 解決Oracle資料庫死鎖Oracle資料庫
- 資料庫解鎖 ---011資料庫
- 資料庫中的悲觀鎖和樂觀鎖資料庫
- 資料庫事物、隔離等級及資料庫鎖機制資料庫
- InnoDB學習(六)之資料庫鎖資料庫
- 資料庫兩大神器【索引和鎖】資料庫索引
- 關於資料庫鎖的總結資料庫
- MySQL資料庫故障分析-鎖等待(一)MySql資料庫
- ORACLE 資料庫中的鎖機制Oracle資料庫
- 【每日鮮蘑】從資料庫看樂觀鎖、悲觀鎖資料庫
- 面試必備的資料庫悲觀鎖與樂觀鎖面試資料庫
- (資料庫十)資料庫中的鎖機制以及死鎖產生的原因及解決辦法資料庫
- S/4 HANA 中的資料庫鎖策略資料庫
- MySQL(一):MySQL資料庫事務與鎖MySql資料庫
- 資料庫鎖的12連問,抗住!資料庫
- 10.1.0.3資料庫帳號被鎖定資料庫
- 求:如何用JDBC給資料表上鎖,而不用資料庫本身的鎖表語句?JDBC資料庫
- 解鎖你的資料庫:JPA和Hibernate的樂觀鎖與悲觀鎖資料庫
- 【資料庫】MySQL鎖機制、熱備、分表資料庫MySql
- 資料庫死鎖排查思路分享(糾正篇)資料庫
- 資料庫系列:MySQL InnoDB鎖機制介紹資料庫MySql
- MongoDB資料庫級別的鎖粒度介紹MongoDB資料庫
- 【MySQL】鎖——檢視當前資料庫鎖請求的三種方法MySql資料庫
- 批量鎖(適用各種關係型資料庫)資料庫