併發操作引發的問題以及封鎖協議

2022-09-13 08:03:10 字數 1280 閱讀 8328

併發操作可能破壞事務的隔離性,帶來的資料不一致性包括三類:

1)丟失修改    2)不可重複讀    3)讀「髒」資料

是網路資料庫中的乙個非常重要的概念,當多個使用者同時對資料庫併發操作時,會帶來資料不一致的問題,所以,鎖主要用於多使用者環境下保證資料庫完整性和一致性

資料庫鎖出現的目的:處理併發問題

資料庫系統角度,基本的鎖型別有兩種:排它鎖(exclusive lock)共享鎖(shared  lock).

排它鎖(x鎖),也稱為寫鎖,表示對資料進行寫操作。

當事務t對資料a加上x鎖時,只允許事務t讀取和修改資料a

共享鎖(s鎖),也稱為讀鎖,用於所有的唯讀資料操作。

當事務t對資料a加上s鎖時,其他事務只能再對資料a加s鎖,而不能加x鎖,直到t釋放a上的s鎖。

若事務t對資料物件a加了s鎖,則t就可以對a進行讀取,但不能進行更新(讀鎖),在t釋放a上的s鎖以前,其他事務可以再對a加s鎖,但不能加x鎖,從而可以讀取a,但不能更新a。

封鎖協議:在運用x鎖和s鎖對資料物件加鎖時,還需要約定一些規則 ,例如何時申請x鎖或s鎖、持鎖時間、何時釋放等。稱這些規則為封鎖協議(locking protocol)。對封鎖方式規定不同的規則,就形成了各種不同的封鎖協議。

1)一級封鎖協議

一級封鎖協議是:事務t在修改資料r之前必須先對其加x鎖,直到事務結束才釋放。事務結束包括正常結束(commit)和非正常結束(rollback)。

一級封鎖協議可以防止丟失修改,並保證事務t是可恢復的。使用一級封鎖協議可以解決丟失修改問題。

在一級封鎖協議中,如果僅僅是讀資料不對其進行修改,是不需要加鎖的,它不能保證可重複讀和不讀「髒」資料。

2)二級封鎖協議

二級封鎖協議是:一級封鎖協議加上事務t在讀取資料r之前必須先對其加s鎖,讀完後方可釋放s鎖。

二級封鎖協議除防止了丟失修改,還可以進一步防止讀「髒」資料。但在二級封鎖協議中,由於讀完資料後即可釋放s鎖,所以它不能保證可重複讀。

3)**封鎖協議 

**封鎖協議是:一級封鎖協議加上事務t在讀取資料r之前必須先對其加s鎖,直到事務結束才釋放。

**封鎖協議除防止了丟失修改不讀「髒」資料外,還進一步防止了不可重複讀

mysql併發操作引發的一些思考

最近公司專案中用到了關係型資料庫mysql,其中會涉及到併發操作,之前也用過mysql,但是只是停在了簡單的用上面 老大搭好架子 寫好demo,我模仿 趁放假好好看看相關的資料,解決一下我一直以來的疑惑。在網上查閱文章的過程中,我對mysql有了新的認識,對鎖 事務等有了了解。感覺要深入理解mysq...

ftp協議的簡單介紹以及相關操作

region webclient上傳 webclient client new webclient new networkcredential lyc lyc 第乙個引數表示要上傳到的伺服器的位址,注意需要自己定義上傳之後的檔名稱,第二引數表示姚上傳的本地檔案路徑 上傳成功 endregion 例項...

併發操作的資料安全問題

多執行緒執行環境下肯定存在併發,會存在乙個物件被多個執行緒同時操作 對同一資料的訪問 的情況,這樣如果不加以控制,很容易存在資料安全問題。下面以乙個銀行轉賬的例子來說明併發可能存在的問題 模擬賬戶 account類 public class account public string getname...