游標、事務并發和鎖三者之間的那點事
對數據庫學習的不斷深入,對游標的認識也在逐漸加深,游標與事務、鎖有著密不可分的關系。 無論是事務、鎖還是游標相對于數據庫來說最主要目的是保證數據的完整性。對事務并發、鎖定的深入學習才能更加完善對游標的理解。少說廢話,下面進入本篇文章的正題。
首先,我們講解游標與事務并發的那點事
事務是為完成特定任務,將一條或多條的SQL語句組合在一起。有效的使用事務不但可以提高數據的安全性,而且還可以增強數據的處理效率。如果沒有鎖定且多個用戶同時訪一個數據庫,多個事務使用相同的數據時就會出現事務并發的問題。
我們一張圖講解事務并發的四個方面:
從上圖我們可以看出來,事務并發的四個方面,歸根結底都有相似的地方:多個事務修改同一行數據,發生錯誤。
對比著學習游標的并發問題,游標的并發與事務的并發基本相同:多個游標修改同一行數據,發生錯誤。
同樣,我們還是一張圖分析游標的四個并發選項:
其次,我們講解鎖和事務并發的那點事
所謂鎖即是保證數據安全、數據庫的完整性和一致性,例如:每家的門鎖,因此,鎖可以防止事務的并發問題。我們看一下鎖的類型:
為了防止數據的并發性,可以使用鎖的粒度即鎖的級別,鎖定不同類型的資源。
書上的概念:當兩個或多個線程之間有循環相關性時,將會產生死鎖。其實簡單的說就是:當兩個或多個事務需要同時使用一組有沖突的鎖,而不能將事務繼續下去,就會出現死鎖。
最后,我們講解游標和鎖的那點事
游標適用于任何其他SELECT語句的相同事務鎖定規則。通過任何SELECT語句獲得的事物鎖由下述兩項控制:
● 連接的事物隔離級別設置
● FROM子句中指定的任何鎖提示
對于游標和獨立的SELECT語句,這些鎖都會保持到當前事務結束。
注:SQL Server以顯性或隱性事務運行,則這些鎖將保持到事務提交或回滾
舉兩個例子,其所作的鎖定基本相同。如下:
/* Example 1 */ /* Example 2 */
|
游標、事務并發和鎖三者之間的關系,就分析這么多,希望對大家有所幫助。同樣,希望大家對菜鳥提出寶貴的意見。
posted on 2012-08-17 10:19 順其自然EVO 閱讀(266) 評論(0) 編輯 收藏 所屬分類: 數據庫