讀鎖git
寫鎖github
查看錶鎖的爭用狀況sql
show status like 'table%';
複製代碼
Table_locks_immediate:產生表級鎖定的次數;bash
Table_locks_waited:出現表級鎖定爭用而發生等待的次數;優化
select * from table_name where ... lock in share mode;
spa
select * from table_name where ... for update;
.net
Innodb行鎖是經過給索引項加鎖
來實現的,只有經過索引條件
檢索數據,Innodb才使用行級鎖,不然,InnoDB將使用表鎖。日誌
當咱們用範圍條件而不是相等條件檢索數據,並請求共享或排他鎖時,Innodb會給符合條件的已有數據記錄的索引項加鎖,對於鍵值在條件範圍內但並不存在的記錄,Innodb也會對這個「間隙」加鎖,這種鎖機制就是所謂的間隙鎖。code
鎖定記錄的同時會鎖記錄cdn
意向共享鎖(IS)
意向排他鎖(IX)
意向鎖的做用就是協調行鎖和表鎖之間的關係的,是將行鎖從另外一個角度提升到了表鎖的等級(僞表鎖),與表鎖進行判斷。
SQL1:select * from t1 where id = 1;
SQL2:delete from t1 where id = 1;
show engine innodb status;
深刻理解業務,瞭解整個事務的處理邏輯。
GAP鎖很複雜,爲了減小GAP鎖致使的死鎖,儘可能選擇RC隔離級別。
適當的減小Unique索引,能夠減小GAP鎖致使的死鎖。
以不一樣的索引過濾條件,來操作相同的記錄,很容易產生死鎖。
參考文章