****什么是共享鎖,什么是排他鎖?****
****共享鎖****也叫讀鎖,簡稱S鎖,原理:一個事務獲取了一個數據行的共享鎖,其他事務能獲得該行對應的共享鎖,但不能獲得排他鎖,即一個事務在讀取一個數據行的時候,其他事務也可以讀,但不能對該數據行進行增刪改。
****排他鎖****也叫寫鎖,簡稱x鎖,原理:一個事務獲取了一個數據行的排他鎖,其他事務就不能再獲取該行的其他鎖(排他鎖或者共享鎖),即一個事務在讀取一個數據行的時候,其他事務不能對該數據行進行增刪改查。
****如何設置共享鎖和排他鎖?****
設置共享鎖:SELECT ... LOCK IN SHARE MODE;
設置排他鎖:SELECT ... FOR UPDATE;
****注意點 ****
- 對于select 語句,innodb不會加任何鎖,也就是可以多個并發去進行select的操作,不會有任何的鎖沖突,因為根本沒有鎖。
- 對于insert,update,delete操作,innodb會自動給涉及到的數據加排他鎖,只有查詢select需要我們手動設置排他鎖。
****什么是意向共享鎖,什么是意向排他鎖?****
意向共享鎖,簡稱IS,其作用在于:通知數據庫接下來需要施加什么鎖并對表加鎖。如果需要對記錄A加共享鎖,那么此時innodb會先找到這張表,對該表加意向共享鎖之后,再對記錄A添加共享鎖。
意向排他鎖,簡稱IX,其作用在于:通知數據庫接下來需要施加什么鎖并對表加鎖。如果需要對記錄A加排他鎖,那么此時innodb會先找到這張表,對該表加意向排他鎖之后,再對記錄A添加共享鎖。
****共享鎖和意向共享鎖,排他鎖與意向排他鎖的區別****
共享鎖和排他鎖,系統在特定的條件下會自動添加共享鎖或者排他鎖,也可以手動添加共享鎖或者排他鎖。
意向共享鎖和意向排他鎖都是系統自動添加和自動釋放的,整個過程無需人工干預。共享鎖和排他鎖都是鎖的行記錄,意向共享鎖和意向排他鎖鎖定的是表。