1. 程式人生 > >MySQL鎖機制淺析

MySQL鎖機制淺析

mysq 概率 共享 不可 不執行 date border ali 發的

MySQL使用了3種鎖機制

行級鎖,開銷大,加鎖慢,會出現死鎖,發生鎖沖突的概率最高,並發度也最高

表級鎖,開銷小,加鎖快,不會出現死鎖,發生鎖沖突的概率最低,並發度最低

頁級鎖,開銷和加鎖時間界於表鎖和行鎖之間;會出現死鎖;鎖定粒度界於表鎖和行鎖之間,並發度一般

MySQL的存儲引擎,這裏指常用的,InnoDB,默認是行級鎖,如果不指定主鍵的話,那麽就是表級鎖了,這點切記

MyISAM是表鎖

innoDB

先來了解下MySQL事務

事務是由一組sql語句組成的邏輯處理單元,有4個屬性ACID

原子性,Atomicity 事務是一個原子操作單元,數據的改變,要麽全部執行,要麽全部不執行,有一個不執行,就會全部不執行

一致性,Consistent 事務開始和完成時,數據都是一致的

隔離性,Ioslation 保證事務不受外界幹擾,根據隔離性的級別進行獨立的運行

持久性,Durable 事務commit之後,對數據的處理是一直有效的,永久性的

MySQL進行事務並發的時候,會帶來以下幾個問題

臟讀,事務A和事務B都操作同一行,A是search,B是update,B更新之後,A進行查詢,這個時候,B進行回滾,那麽剛剛A查詢到的數據就是臟數據,A的操作就是臟讀

不可重復讀,事務A和事務B都操作同一行,A是search,B是update,A先查詢,然後B進行更新,提交,A在查詢的時候,和第一次查詢的結果不一樣,這就是不可重復讀

幻讀,事務A和事務B都操作同一行,A是update,B是insert,A在更新的過程中,B進行了操作,結果A以為自己沒有進行剛剛的操作,就造成了幻讀

隔離級別

讀數據一致性及允許的並發副作用 隔離級別 讀數據一致性 臟讀 不可重復讀 幻讀
未提交讀(Read uncommitted) 最低級別,只能保證不讀取物理上損壞的數據
已提交度(Read committed) 語句級
可重復讀(Repeatable read) 事務級
可序列化(Serializable) 最高級別,事務級

共享鎖,也是讀鎖,加鎖期間,其他事務可以進行讀操作,不能進行寫操作,直到鎖解除

排他鎖,也是讀寫鎖,加鎖期間,其他事務不能進行讀寫操作,直到鎖解除,

MySQL鎖機制淺析