行鎖
1、支持的存儲引擎:Innodb;
2、InnoDB行鎖是通過給索引上的索引項加鎖來實現的,意味着:只有通過索引條件檢索數據,InnoDB才使用行級鎖,否則,InnoDB將使用表鎖!
3、適用場景:有大量按索引條件並發更新少量不同數據,同時又有並發查詢的應用
4、特點:開銷大,加鎖慢;會出現死鎖;鎖定粒度小,發生鎖沖突的概率低,並發度高
5、分析:show status like 'innodb_row_lock%';分析系統上行鎖的爭奪情況如果發現鎖爭用比較嚴重,如InnoDB_row_lock_waits和InnoDB_row_lock_time_avg的值比較高,還可以通過設置InnoDB Monitors來進一步觀察發生鎖沖突的表、數據行等,並分析鎖爭用的原因。
表鎖
1、支持的存儲引擎:Innodb、MYIsam
2、適用場景:以查詢為主,只有少量按索引條件更新數據的應用
3、特點:開銷小,加鎖快;不會出現死鎖;鎖定力度大,發生鎖沖突概率高,並發度最低
4、兩種模式:
• 表共享讀鎖
• 表獨占寫鎖
5、對兩張表顯示加鎖、解鎖
Lock tables orders read local, order_detail read local;
Select sum(total) from orders;
Select sum(subtotal) from order_detail;
Unlock tables;
6、MyISAM在執行查詢語句(SELECT)前,會自動給涉及的所有表加讀鎖,在執行更新操作(UPDATE、DELETE、INSERT等)前,會自動給涉及的表加寫鎖