【mysql】行鎖/間隙鎖/區間鎖

  • 行鎖 record lock
  • 間隙鎖 gap lock
  • 區間鎖 next-key lock

做用

防止幻讀sql

何時會取得gap lock或者next-key lock

隔離級別有關,只在REPEATABLE READ或以上的隔離級別下的特定操做纔會取得gap lock或nextkey lock。
UPDATE和DELETE時,除了對惟一索引的惟一搜索外都會獲取gap鎖或next-key鎖。即鎖住其掃描的範圍。code

簡單來講,影響到的字段不是惟一的,會變爲區間鎖
若是是惟一的,會取得 行鎖索引

select * from t where id = 1 for update;

只鎖定一行記錄資源

select * from t where id >5 for update;

鎖定 (5,n] 的數據行class

select * from t where field_a = 100 for update;

若是此字段沒有索引,會變爲表鎖,由於須要一條一條遍歷,不然只鎖知足隻字段的數據date

  • S 鎖 共享鎖,同一時刻都能讀但只能一我的寫
  • X 鎖 排他鎖,同一時刻讀寫都只能一個資源操做
相關文章
相關標籤/搜索