主要討論rr隔離級別,因為rc只是少了間隙鎖。
1.共享鎖(shared locks,s鎖) 2.排他鎖(exclusive locks,x鎖)
可以一起讀,讀寫/寫寫互斥。
1.意向共享鎖(intention shared lock,is) 2.意向排它鎖(intention exclusive lock,ix)
看起來像表級鎖,解決表級鎖和行級鎖的衝突。 意向鎖之間相容。 事務在請求s鎖和x鎖前,需要先獲得對應的is、ix鎖。sx
is相容
互斥ix
互斥互斥
記錄鎖(record locks)單條索引記錄上加鎖,record lock鎖住的永遠是索引,而非記錄本身。如果沒有顯示索引,innodb會建立隱式的聚集索引。
間隙鎖(gap locks)鎖住乙個索引區間(開區間)。 鎖住索引記錄的區間,或第一條索引記錄之前的範圍,或者最後一條索引記錄之後的範圍。
臨鍵鎖(next-key locks)記錄鎖與間隙鎖的組合,它的封鎖範圍,既包含索引記錄,又包含索引區間(左開右閉區間)。
插入意向鎖(insert intention locks)一種特殊的間隙鎖。 兩個事務只要插入的行沒有衝突,即使在同一間隙,也可以插入。
鎖相容矩陣
gapinsert intention
record
next-key
gap相容
相容相容
相容insert intention
衝突相容
相容衝突
record
相容相容
衝突衝突
next-key
相容相容
衝突衝突
存在insert intention 鎖時,申請gap鎖是允許的;但是存在gap鎖時,申請insert intention鎖時是被阻止的。
表級鎖,多個事務同時插入時,保證auto_increment列遞增。
1.讀未提交,讀提交,可重複讀不加鎖,快照讀2.序列化,普通select會公升級為select ... in share mode
select ... for update select ... in share mode 1.唯一索引,唯一條件記錄鎖(record locks)2.其他的查詢條件和索引條件間隙鎖(gap locks)與臨鍵鎖(next-key locks)
1.唯一索引,唯一條件記錄鎖(record locks)2.其他,排他臨鍵鎖(next-key locks)
排它鎖、同時,會在插入區間加插入意向鎖(insert intention lock)。
參考:dev.mysql.com/doc/refman/…
InnoDB Mysql加鎖情況
主要討論rr隔離級別,因為rc只是少了間隙鎖。1.共享鎖 shared locks,s鎖 2.排他鎖 exclusive locks,x鎖 可以一起讀,讀寫 寫寫互斥。1.意向共享鎖 intention shared lock,is 2.意向排它鎖 intention exclusive lock,...
mysql自定義加鎖 為MySQL加鎖?
在日常操作中,update insert delete innodb會自動給涉及的資料集加排他鎖,一般的 select 一般是不加任何鎖的。我們可以使用以下方式顯示的為 select 加鎖。共享鎖 select from table name where id 10 lock in share mo...
atomic 加鎖操作
property atomic,strong nsstring name setter void setname name getter void name 為什麼加鎖 多執行緒的安全隱患 資源共享 一塊資源可能會被多個執行緒共享,也就是多個執行緒可能會訪問同一塊資源 比如多個執行緒訪問同乙個物件 ...