鎖
- 行鎖 record lock
- 間隙鎖 gap lock
- 區間鎖 next-key lock
作用
防止幻讀
什么時候會取得gap lock或者next-key lock
隔離級別有關,只在REPEATABLE READ或以上的隔離級別下的特定操作才會取得gap lock或nextkey lock。
UPDATE和DELETE時,除了對唯一索引的唯一搜索外都會獲取gap鎖或next-key鎖。即鎖住其掃描的范圍。
簡單來說,影響到的字段不是唯一的,會變為區間鎖
如果是唯一的,會取得 行鎖
select * from t where id = 1 for update;
只鎖定一行記錄
select * from t where id >5 for update;
鎖定 (5,n] 的數據行
select * from t where field_a = 100 for update;
如果此字段沒有索引,會變為表鎖,因為需要一條一條遍歷,否則只鎖滿足只字段的數據
- S 鎖 共享鎖,同一時刻都能讀但只能一個人寫
- X 鎖 排他鎖,同一時刻讀寫都只能一個資源操作