資料庫的事務和鎖

2022-08-24 21:33:07 字數 2071 閱讀 6955

事務

是作為乙個邏輯單元執行的一系列操作,乙個邏輯工作單元必須有四個屬性,稱為 acid(原子性、一致性、隔離性和永續性)屬性.

1、a (atomicity) 原子性

事務必須是原子工作單元;對於其資料修改,要麼全都執行,要麼全都不執行。
2、c (consistency)一致性

事務在完成時,必須使所有的資料都保持一致狀態。在相關資料庫中,所有規則都必須應用於事務的修

改,以保持所有資料的完整性。事務結束時,所有的

內部資料結構(如 b樹索引或雙向鍊錶)都必須是正確的。

3、i (isolation) 隔離性

併發事務所做的修改必須與任何其他併發事務所做的

修改隔離。事務識別資料時資料所處的狀態,要麼是

另一併發事務修改它之前的狀態,要麼是第二個事務

修改它之後的狀態,事務不會識別中間狀態的資料。

4、d (durability) 永續性

事務完成之後,它對於系統的影響是永久性的。該修

改即使出現系統故障也將一直保持。

鎖定是 microsoft sql server資料庫引擎用來同步多個使用者同時對同乙個資料塊的訪問的一種機制。

在事務獲取資料塊當前狀態的依賴關係(比如通過讀取或修改資料)之前,它必須保護自己不受其他事務對同一資料進行修改的影響。事務通過請求鎖定資料塊來達到此目的。鎖有多種模式,如共享或獨佔

1、髒讀

某個事務讀取的資料是另乙個事務正在處理的資料。而另乙個事務可能會回滾,造成第乙個事務讀取的資料是錯誤的。

2、不可重複讀

在乙個事務裡兩次讀入資料,但另乙個事務已經更改了第乙個事務涉及到的資料,造成第乙個事務讀入舊資料。

3、幻讀

幻讀是指當事務不是獨立執行時發生的一種現象。例如第乙個事務對乙個表中的資料進行了修改,這種修改涉及到表中的全部資料行。同時,第二個事務也修改這個表中的資料,這種修改是向表中插入一行新資料。那麼,以後就會發生操作第乙個事務的使用者發現表中還有沒有修改的資料行,就好象發生了幻覺一樣。

4、更新丟失

多個事務同時讀取某一資料,乙個事務成功處理好了資料,被另乙個事務寫回原值,造成第乙個事務更新丟失。

讀未提交 讀已提交 可重複讀 可序列化

鎖模式:

1、共享鎖

共享鎖(s 鎖)允許併發事務在封閉式併發控制下讀取 (select)資源。有關詳細資訊,請參閱併發控制的型別。資源上存在共享鎖(s鎖)時,任何其他事務都不能修改資料。讀取操作一完成,就立即釋放資源上的共享鎖(s鎖),除非將事務隔離級別設定為可重複讀或更高階別,或者在事務持續時間內用鎖定提示保留共享鎖(s鎖)。

2、更新鎖(u鎖)

更新鎖在共享鎖和排他鎖的雜交。更新鎖意味著在做乙個更新時,乙個共享鎖在掃瞄完成符合條件的資料後可能會轉化成排他鎖。

這裡面有兩個步驟:

1) 掃瞄獲取where條件時。這部分是乙個更新查詢,此時是乙個更新鎖。

2) 如果將執行寫入更新。此時該鎖公升級到排他鎖。否則,該鎖轉變成共享鎖。

更新鎖可以防止常見的死鎖。

3、排他鎖

排他鎖(x 鎖)可以防止併發事務對資源進行訪問。排他鎖不與其他任何鎖相容。使用排他鎖(x鎖)時,任何其他事務都無法修改資料;僅在使用 nolock提示或未提交讀隔離級別時才會進行讀取操作。

如何避免死鎖

(1).按同一順序訪問物件。(注:避免出現迴圈) (2).避免事務中的使用者互動。(注:減少持有資源的時間,較少鎖競爭) (3).保持事務簡短並處於乙個批處理中。(注:同(2),減少持有資源的時間) (4).使用較低的隔離級別。(注:使用較低的隔離級別(例如已提交讀)比使用較高的隔離級別(例如可序列化)持有共享鎖的時間更短,減少鎖競爭) (5).使用基於行版本控制的隔離級別:2005中支援快照事務隔離和指定read_committed隔離級別的事務使用行版本控制,可以將讀與寫操作之間發生的死鎖機率降至最低:

資料庫事務和鎖

事務是作為單個邏輯工作單元執行的一系列操作,乙個邏輯工作單元必須有四個屬性 原子性,一致性,隔離性和永續性 acid 屬性。事務的回滾 將顯式事務或者隱式事務回滾到事務的起始點或者是事務內的儲存點。關於鎖的引入 併發導致的幾種問題 引入鎖既可以在一段時間內禁止使用者做某些操作以免導致產生資料不一致。...

資料庫事務和鎖

鎖 回滾 作為工作單元執行的一系列操作。顯式事務和隱式事務 排它鎖exclusive lock 共享鎖shared lock 更新鎖 相容共享鎖,不相容更新鎖 排它鎖 意向鎖目的 在較高粒度級別有效監測不相容的鎖定請求,防止授予不相容的鎖。架構鎖其他更高階鎖事務之間相互制約的關係就是鎖的相容性。可鎖...

資料庫的鎖,事務和事務隔離

資料庫中的鎖 鎖的種類 按照鎖的內容上分為 表鎖,頁鎖,行鎖。innodb支援行鎖,myisam支援表鎖,berkeleydba支援頁鎖。不同的粒度 按照鎖的性質分可以分為 共享鎖 讀鎖或s鎖 獨佔鎖 寫鎖,排它鎖 x鎖 更新鎖 u鎖 意向鎖 當執行select時候,加共享鎖,當insert upd...