1. 程式人生 > >MySQL-----鎖(行鎖、表鎖、頁鎖、樂觀鎖、悲觀鎖)

MySQL-----鎖(行鎖、表鎖、頁鎖、樂觀鎖、悲觀鎖)

數據庫操作 重要 讀寫 收購 線程並發 串行化 之前 並發執行 引擎

回顧:

ACID:DBMS在寫入或更新資料的過程中,為保證事務正確可靠,具有的四個特性:原子性(不可分割性)、一致性、隔離性(獨立性)、持久性

一個事務:一系列數據庫操作組成的一個完整的邏輯過程

原子性:一個事務中的所有操作,要麽全部完成、要麽全部不完成,若發生錯誤,回滾(RollBack)

一致性:事務開始之前和事務結束之後,數據庫的完整性沒有破壞

隔離性:數據庫允許多個並發事務同時對其數據進行讀寫和修改的能力,隔離性可以防止多個事務並發執行時由於交叉執行而導致數據的不一致。事務隔離分為不同級別:讀未提交、讀提交、可重復讀、串行化

持久性:事務處理結束後,對數據的修改時永久性的,系統出故障也不會改變

:協調多個進程或線程並發訪問某一資源的一種機制.鎖沖突是影響數據庫並發訪問性能的重要因素。

存儲引擎支持不同的鎖機制

行鎖 表鎖 頁鎖
MyISAM 支持
BDB 支持 支持
InnoDB 支持 支持

開銷、加鎖速度、死鎖、粒度、並發性能

  • 行鎖:開銷大,加鎖慢,會出現死鎖;鎖定粒度小,鎖沖突概率小,並發度高
  • 表鎖:開銷小,加鎖快,不會出現死鎖;鎖定粒度大,發生鎖沖突概率高,並發度最低
  • 頁鎖:開銷和加鎖速度介於行鎖和表鎖之間,會出現死鎖;鎖粒度介於表鎖和行鎖之間,並發度一般

###根據具體應用決定適合那種鎖,僅從鎖的角度:表鎖適合以查詢為主;表鎖適合按大量索引條件並發更新少量不同數據,同時又有並發查詢的應用

MyISAM表鎖

MyISAM只支持表鎖,隨著應用對事務的完整性和並發性要求提高,MySQL才開始開發基於事務的存儲引擎,而來出來InnoDB的行鎖和BDB的頁鎖,InnoDB被Oracle收購

先記錄到此,後續更新

MySQL-----鎖(行鎖、表鎖、頁鎖、樂觀鎖、悲觀鎖)