鎖是在執行多線程時用於強行限制資源訪問的同步機制,即用於在併發控制中保證對互斥要求的知足。在DBMS中,能夠按照鎖的粒度把數據庫鎖分爲行級鎖(INNODB引擎)、表級鎖(MYISAM引擎)和頁級鎖(BDB引擎 )。數據庫
行鎖多線程
鎖定整個行數據,開銷大,加鎖慢,會出現死鎖。鎖定粒度小,發生鎖衝突的機率低,併發度高。併發
表鎖線程
鎖定整個表數據,開銷小,加鎖快,不會出現死鎖。鎖定粒度大,發生鎖衝突機率高,併發度低。blog
悲觀鎖事務
每次取數據時都認爲別人會修改,因此每次取數據的時候都會上鎖,這樣別人想拿這個數據就會被阻塞,直到它拿到鎖。傳統的關係型數據庫裏邊就用到了不少這種鎖機制,好比行鎖,表鎖等,讀鎖,寫鎖等,都是在作操做以前先上鎖。適用於「寫多讀少」的場景。資源
樂觀鎖同步
每次取數據時都認爲別人不會修改,因此不會上鎖,可是在更新的時候會判斷一下在此期間別人有沒有去更新這個數據,能夠使用版本號等機制。適用於「讀多寫少」的場景,這樣能夠提升吞吐量。數據庫中的write_condition機制就是樂觀鎖。it
共享鎖io
共享鎖指的是對於多個不一樣的事務,對同一個資源共享同一個鎖。至關於對於同一把門,它擁有多個鑰匙同樣。共享鎖也屬於悲觀鎖的一種,經過在執行語句後面加上lock in share mode就加上共享鎖了。