一.對鎖機制的大概介紹:
? ? ? ? 1.大概的來說,MYSQL當中的鎖實際上就是合理的管理多個服務器對于同一個共享資源的使用,是計算機協調多個進程或者是線程并發訪問某一資源的機制(避免爭搶資源的現象發生)
? ? ? ? 2.在數據庫當中,數據是一種可以供許多的用戶進行共享使用的資源,如何保證數據并發訪問的一致性,有效性是所有的數據庫必須進行解決的一個關鍵問題,鎖沖突也是影響數據庫并發訪問性能的一個重要因素.從這個角度來講,鎖對于數據庫顯得非常的重要,相同的,也更加的復雜
二.鎖的大概分類
? ? ? ? 1.從對于數據操作的力度區分:
1>表鎖:操作的時候會對于整個表進行鎖定
2>行鎖,操作時,會鎖定操作的行
? ? ? ? 2.從對于數據操作的類型進行區分:
1>讀鎖(共享鎖) :針對于同一份的數據,多個的讀取操作可以同時的進行,并且并不會相互的有所影響(前提是并沒有任何的更改數據操作)
2>寫鎖(排它鎖) :在當前操作尚未完成之前,會阻斷其他的讀鎖以及相應的寫鎖
三.MYSQL的鎖機制:
? ? ? ? 相比于其他的鎖,MYSQL的鎖機制比較的簡單,最顯著的特征就是針對不同的存儲引擎有不同的鎖機制
四:不同存儲引擎的操作演示:
? ? ? ? 1>MYISAM存儲引擎:
? ? ? ? 因為MYISAM僅僅只支持表鎖,所以僅僅只講解表鎖得相關操作
? ? ? ? 1.讀鎖:(lock table tablename read)
? ? ? ? ? ? ? ? 進行讀鎖之后,發現兩個都能夠對這個表進行相應的數據查詢,但是無法進行切換到其他的表以及進行相應的數據添加和修改.同時的兩個都能夠對于同一張表進行讀鎖的操作,不相沖突
? ? ? ? ? ? ? ? 一旦加了讀鎖,就必須查看當前的表,不能對于其他的表進行操作,除非解除讀鎖(unlock tables)
? ? ? ? 2.寫鎖(lock table test1 write):
? ? ? ? 在左邊加入了寫鎖之后,左邊可以正常的進行查詢當前鎖表,并且進行一些修改,但是右邊無法對其進行任何得操作,比如圖中得查詢操作,也會因為被上了寫鎖而讓右邊對其得查詢被掛起,無法進行下去!
? ? ? ? 通俗得說,寫鎖就是占用了一個其他任何人都無法進入得空間,僅僅只有當事人可以對其進行一定得操作,其他人都不能,解除寫鎖之后方可.并且,寫鎖僅僅只能一個服務器單獨得針對一個表,而不能像讀鎖一樣可以多個都進行添加鎖
? ? ? ? 2>InnoDB存儲引擎:
? ? ? ? InnoDB的表鎖跟MYISAM的大致上都是一樣的,所以就不再概述,在這里主要講解行鎖的相關操作:
? ? ? ? 同時為了方便觀察,建議關閉事務的自動提交!
? ? ? ? 1.行鎖的特點:
????????偏向于INNODB,開銷比較的大,并且加鎖比較的慢,鎖的定位力度最小,但是,因為是對與一行一行的進行行鎖,那么發生鎖沖突的概率也是比較低的,并發度也是最高的(同時進行操作)
? ? ? ? 1.共享鎖(又稱為讀鎖)? 多個事務可以對于同一列進行訪問數據,但是僅僅只能夠進行讀取,而不能夠進行相應的修改數據
? ? ? ? 2.排它鎖(又稱為寫鎖)? 不能夠與其他的鎖并存,一個事務獲得了一行數據的排他鎖,那么其他的事務就不能夠對其再次的進行獲取,包括了讀取以及修改,除非該鎖打開
? ? ? ? 如圖,當沒有提交事務之前,如果再對于同一個行的數據再次進行修改的時候就會被掛起,從而無法修改,但是!可以對于除了這一行的其他行進行修改!這就是行鎖對于表鎖的一大不同之處
? ? ? ? TIPS:
? ? ? ? 對于DQL的相關操作:update insert delete操作,INNODB都會自動的進行添加排他鎖
? ? ? ? 對于普通的查詢操作,并不會添加任何的鎖
????????????????????????????????????????????????????????????????OVER!感謝觀看
????????