數據庫-封鎖類型


1.讀寫鎖

互斥鎖(Exclusive),簡寫為X鎖,又稱為寫鎖。

共享鎖(Shared),簡寫為S鎖,又稱為讀鎖。

對X鎖和S鎖有兩個規定:

①一個事務對數據對象A加了X鎖,那么就可以對A進行讀取和更新。加鎖期間其他事務不能對A加任何形式的鎖。

②一個事務對數據對象A加了S鎖,可以對A進行讀取操作,但是不能進行更新操作。加鎖期間其他事務能對A加S鎖,但是不能加X鎖。

 

2.意向鎖

意向鎖在X/S鎖的基礎上引入了IX/IS鎖。意向鎖是一種表級鎖,但是它是一種不與行級鎖沖突的表級鎖。加意向鎖不會影響加行級鎖,它只會阻塞表級鎖。使用意向鎖(Intention Locks)可以支持多粒度封鎖(同時存在表級鎖和行級鎖)。

意向鎖主要解決在表級鎖和行級鎖同時存在時,加表級鎖需要檢測表級鎖和每一行的行級鎖時效率低下的問題。比如在同時存在表級鎖和行級鎖的時候,如果一個事務想要對表A加X鎖(表級鎖),就要檢測表A以及表A的任一行是否加了鎖,這樣檢測十分耗時。

意向鎖的主要作用是:如果有一個事務在表上加了鎖,其他事務想要在該表級別上應用X鎖或S鎖,就會受到第一個事務的意向鎖的阻塞。其他事務在鎖定該表之前不需要檢測表或者表的每一行是否加了鎖,而只需要檢測表的意向鎖。

意向鎖是數據引擎(InnoDB)自己維護的,用戶不能手動修改意向鎖。一個事務在表的某一行加X鎖或S鎖之前,數據引擎會先獲取該數據行所在數據表的相應IX或IS鎖。

所有的意向鎖之間是兼容的。意向鎖也不會與行級的S/X鎖互斥。

意向鎖不會影響多個事務對表的不同行加互斥鎖,但用普通的表鎖會

意向鎖只是為了用來阻塞表級鎖,意向鎖和表級讀寫鎖之間的兼容關系如下表:

  意向互斥鎖 意向共享鎖
表級互斥鎖 沖突 沖突
表級共享鎖 沖突 兼容

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM