表鎖、行鎖、意向鎖和間隙鎖


MySQL不支持鎖升級,要一次獲取所有需要的鎖。

 

表鎖

MyISAM中的表鎖。寫請求比讀請求優先級高。

表共享讀鎖(Table Read Lock):lock tables xxx read local

表獨占寫鎖(Table Write Lock):lock tables xxx write

concurrent_insert:控制並發插入行為,配合read local。

  0:不允許並發插入。

  1:如果表中沒有空洞(表中間沒有被刪除的行),允許在一個進程讀表的同時,另一個從表尾插入(默認)

  2:無論有沒有空洞,都允許表尾插入。

 

行鎖

InnoDB下,是給索引加行鎖,如果沒有通過索引條件檢索數據,則會使用表鎖。

共享鎖(S):lock in share mode

排他鎖(X):for update

 

意向鎖

表級鎖,在獲得一個鎖之前,會先申請獲得其意向鎖,來阻塞其他沖突的鎖請求。

假設線程A獲得一個行鎖,此時線程B想獲得一個表鎖,如果沒有意向鎖,則線程B需要先判斷有沒有沖突的表鎖,然后判斷表中每一行有沒有沖突的行鎖,這種方式效率很低。而有了意向鎖之后,意向鎖作為一個表級鎖,可以極高效率地判斷鎖沖突情況。

 

間隙鎖

鎖住滿足索引條件檢索的區間,其他事務插入該區間內的數據時會失敗,解決了幻讀的問題。


免責聲明!

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



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