鎖的型別:
基本的封鎖型別有兩種:排它鎖(x鎖)和共享鎖(s鎖)。所謂x鎖,是事務t對資料a加上x鎖時,只允許事務t讀取和修改資料a,…所謂s鎖,是事務t對資料a加上s鎖時,其他事務只能再對資料a加s鎖,而不能加x鎖,直到t釋放a上的s鎖。若事務t對資料物件a加了s鎖,則t就可以對a進行讀取,但不能進行更新(s鎖因此又稱為讀鎖),在t釋放a上的s鎖以前,其他事務可以再對a加s鎖,但不能加x鎖,從而可以讀取a,但不能更新a。三個級別級封鎖協議:
在運用x鎖和s鎖對資料物件加鎖時,還需要約定一些規則 ,例如何時申請x鎖或s鎖、持鎖時間、何時釋放等。稱這些規則為封鎖協議(locking protocol)。對封鎖方式規定不同的規則,就形成了各種不同的封鎖協議。一級封鎖協議
一級封鎖協議是:事務t在修改資料r之前必須先對其加x鎖,直到事務結束才釋放。事務結束包括正常結束(commit)和非正常結束(rollback)。一級封鎖協議可以防止丟失修改,並保證事務t是可恢復的。使用一級封鎖協議可以解決丟失修改問題。
在一級封鎖協議中,如果僅僅是讀資料不對其進行修改,是不需要加鎖的,它不能保證可重複讀和不讀「髒」資料。
二級封鎖協議
二級封鎖協議是:一級封鎖協議加上事務t在讀取資料r之前必須先對其加s鎖,讀完後方可釋放s鎖。二級封鎖協議除防止了丟失修改,還可以進一步防止讀「髒」資料。但在二級封鎖協議中,由於讀完資料後即可釋放s鎖,所以它不能保證可重複讀。
**封鎖協議
**封鎖協議是:一級封鎖協議加上事務t在讀取資料r之前必須先對其加s鎖,直到事務結束才釋放。**封鎖協議除防止了丟失修改和不讀「髒」資料外,還進一步防止了不可重複讀。
資料庫隔離級別 對應封鎖協議
1.讀未提交 read uncommit 一級封鎖協議 讀取資料的時候不加鎖,更新的時候整個加x鎖 b事物執行到一半,a事物不檢測鎖直接讀取,結果b事物回滾了,導致a事物讀出了乙個錯的結果,這就是髒讀。2.讀已提交 read committed 二級封鎖協議 讀取資料的時候加s鎖,更新的時候加x鎖 ...
資料庫的三個正規化
強調列的原子性,即列不能夠再分成其他幾列。考慮有這樣乙個表 聯絡人 姓名 性別 如果在實際場景中,乙個聯絡人有家庭 和公司 那麼這種表結構就不符合1nf,應把 列拆分成家庭 和公司 首先是1nf,另外還有兩部分內容。1.乙個表必須有乙個主鍵。2.不在主鍵裡的列必須依賴主鍵的所有內容,而不能只依賴主鍵...
資料庫入門 三個正規化
我覺得他說的最對 我也來解釋一波,參考 資料庫系統概念 書上一開始講得什麼 組合屬性 多值屬性 都是在講 e r模型和表的區別,就是說e r模型允許存在上述子結構,而表不能,跟第一正規化的解釋沒有直接關係。第一正規化實際的解釋為 關係模式中所有的屬性的域都是原子域。舉幾個反例 存在以上屬性的關係模式...