1. 程式人生 > >myisam與innodb的鎖

myisam與innodb的鎖

本文整理了一些myisam和innodb鎖的知識點,以便查閱。


Myisam的鎖

# 使用表鎖

# 事務A獲取讀鎖後,事務A可以讀取,但是不能修改,事務B可以讀取,修改會等待事務A釋放鎖

# select、insert、update、delete等操作都會自動加鎖

# 同一時間,不同程序對同一張表獲取鎖時,寫鎖優先順序大於讀鎖,這也是Myisam儲存引擎不適合有大量寫操作應用的原因,大量寫操作會導致讀鎖等待

# 可以通過給insert、update、delete等加low_priority屬性降低語句的優先順序

# max_write_lock_count: 當等待讀鎖數量達到該值時,降低寫鎖優先順序,讓讀鎖獲得一定的機會


InnoDB的鎖

# update、select、delete都會自動加排他鎖,select不會加鎖

# select...IN SHARE MODE獲得共享鎖,如果當前事務會對同一記錄執行更新操作,則應該用select...FOR UPDATE獲得排他鎖,否則可能造成死鎖

# InnoDB的行鎖是加在索引上的,也就意味著如果當前選擇沒有命中索引,則會加表鎖

# InnoDB加鎖策略還與執行計劃有關,如果SQL執行計劃認為權標掃描效率更高,則會使用表鎖,而不是行鎖

# 樂觀鎖與悲觀鎖:《深入理解樂觀鎖與悲觀鎖》