mysql鎖(八)innodb下的共享鎖和排他鎖

****什么是共享鎖,什么是排他鎖?****

****共享鎖****也叫讀鎖,簡稱S鎖,原理:一個事務獲取了一個數據行的共享鎖,其他事務能獲得該行對應的共享鎖,但不能獲得排他鎖,即一個事務在讀取一個數據行的時候,其他事務也可以讀,但不能對該數據行進行增刪改。

****排他鎖****也叫寫鎖,簡稱x鎖,原理:一個事務獲取了一個數據行的排他鎖,其他事務就不能再獲取該行的其他鎖(排他鎖或者共享鎖),即一個事務在讀取一個數據行的時候,其他事務不能對該數據行進行增刪改查。


****如何設置共享鎖和排他鎖?****
設置共享鎖:SELECT ... LOCK IN SHARE MODE;
設置排他鎖:SELECT ... FOR UPDATE;


****注意點 ****

  • 對于select 語句,innodb不會加任何鎖,也就是可以多個并發(fā)去進行select的操作,不會有任何的鎖沖突,因為根本沒有鎖。
  • 對于insert,update,delete操作,innodb會自動給涉及到的數據加排他鎖,只有查詢select需要我們手動設置排他鎖。

****什么是意向共享鎖,什么是意向排他鎖?****
意向共享鎖,簡稱IS,其作用在于:通知數據庫接下來需要施加什么鎖并對表加鎖。如果需要對記錄A加共享鎖,那么此時innodb會先找到這張表,對該表加意向共享鎖之后,再對記錄A添加共享鎖。

意向排他鎖,簡稱IX,其作用在于:通知數據庫接下來需要施加什么鎖并對表加鎖。如果需要對記錄A加排他鎖,那么此時innodb會先找到這張表,對該表加意向排他鎖之后,再對記錄A添加共享鎖。


****共享鎖和意向共享鎖,排他鎖與意向排他鎖的區(qū)別****

  • 共享鎖和排他鎖,系統(tǒng)在特定的條件下會自動添加共享鎖或者排他鎖,也可以手動添加共享鎖或者排他鎖。
    意向共享鎖和意向排他鎖都是系統(tǒng)自動添加和自動釋放的,整個過程無需人工干預。

  • 共享鎖和排他鎖都是鎖的行記錄,意向共享鎖和意向排他鎖鎖定的是表。


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容