在MySQL事務隔離中已經提到了事務隔離級別和髒讀、不可重複讀、幻讀產生的緣由。爲了應對這些問題,主流數據庫都提供了鎖機制,並引入了事務隔離級別的概念。mysql
在計算機科學,特別是程序設計、操做系統、多處理機和數據庫等領域,併發控制(
Concurrency control
)是確保及時糾正由併發操做致使的錯誤的一種機制。sql
數據庫管理系統(DBMS)中的併發控制的任務是確保在多個事務同時存取數據庫中同一數據時不破壞事務的隔離性和統一性以及數據庫的統一性。下面舉例說明併發操做帶來的數據不一致性問題:數據庫
現有兩處火車票售票點,同時讀取某一趟列車車票數據庫中車票餘額爲 X。兩處售票點同時賣出一張車票,同時修改餘額爲 X -1寫回數據庫,這樣就形成了實際賣出兩張火車票而數據庫中的記錄卻只少了一張。 產生這種狀況的緣由是由於兩個事務讀入同一數據並同時修改,其中一個事務提交的結果破壞了另外一個事務提交的結果,致使其數據的修改被丟失,破壞了事務的隔離性。併發控制要解決的就是這類問題。多線程
封鎖、時間戳、樂觀併發控制(樂觀鎖)和悲觀併發控制(悲觀鎖)是併發控制主要採用的技術手段。併發
當併發事務同時訪問一個資源時,有可能致使數據不一致,所以須要一種機制來將數據訪問順序化,以保證數據庫數據的一致性。鎖就是其中的一種機制。oracle
在計算機科學中,鎖是在執行多線程時用於強行限制資源訪問的同步機制,即用於在併發控制中保證對互斥要求的知足。spa
1、按操做劃分,可分爲DML鎖
、DDL鎖
操作系統
2、按鎖的粒度劃分,可分爲表級鎖
、行級鎖
、頁級鎖
(mysql).net
3、按鎖級別劃分,可分爲共享鎖
、排他鎖
線程
4、按加鎖方式劃分,可分爲自動鎖
、顯示鎖
5、按使用方式劃分,可分爲樂觀鎖
、悲觀鎖
DML鎖(data locks,數據鎖),用於保護數據的完整性,其中包括行級鎖(Row Locks (TX鎖))、表級鎖(table lock(TM鎖))。 DDL鎖(dictionary locks,數據字典鎖),用於保護數據庫對象的結構,如表、索引等的結構定義。其中包排他DDL鎖(Exclusive DDL lock)、共享DDL鎖(Share DDL lock)、可中斷解析鎖(Breakable parse locks)