MySQL - 行鎖 表鎖 樂觀鎖 悲觀鎖 讀鎖 寫鎖

鎖是在執行多線程時用於強行限制資源訪問的同步機制,即用於在併發控制中保證對互斥要求的知足。在DBMS中,能夠按照鎖的粒度把數據庫鎖分爲行級鎖(INNODB引擎)、表級鎖(MYISAM引擎)和頁級鎖(BDB引擎 )。數據庫

行鎖多線程

鎖定整個行數據,開銷大,加鎖慢,會出現死鎖。鎖定粒度小,發生鎖衝突的機率低,併發度高。併發

表鎖線程

鎖定整個表數據,開銷小,加鎖快,不會出現死鎖。鎖定粒度大,發生鎖衝突機率高,併發度低。blog

悲觀鎖事務

每次取數據時都認爲別人會修改,因此每次取數據的時候都會上鎖,這樣別人想拿這個數據就會被阻塞,直到它拿到鎖。傳統的關係型數據庫裏邊就用到了不少這種鎖機制,好比行鎖,表鎖等,讀鎖,寫鎖等,都是在作操做以前先上鎖。適用於「寫多讀少」的場景。資源

樂觀鎖同步

每次取數據時都認爲別人不會修改,因此不會上鎖,可是在更新的時候會判斷一下在此期間別人有沒有去更新這個數據,能夠使用版本號等機制。適用於「讀多寫少」的場景,這樣能夠提升吞吐量。數據庫中的write_condition機制就是樂觀鎖。it

共享鎖io

共享鎖指的是對於多個不一樣的事務,對同一個資源共享同一個鎖。至關於對於同一把門,它擁有多個鑰匙同樣。共享鎖也屬於悲觀鎖的一種,經過在執行語句後面加上lock in share mode就加上共享鎖了。

相關文章
相關標籤/搜索