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