一、為什么二級封鎖協議不能保證可重復讀
排它鎖又叫寫鎖,事務A對數據D加了排它鎖,其它任何事務都不能再對數據D加共享鎖或者排它鎖。也就是說A可以讀取或者修改D,但是其它事務不能讀也不能寫,但是即使數據D加了寫鎖,其它事務的最基本的select語句還是可以讀數據D的,因為最基本的select語句并不用申請任何鎖!這個是最迷惑的地方,明白了這一點,一級封鎖協議協議會讀臟數據就很好理解了。
事務A對數據D=1加了排它鎖,修改了數據使D=2,這個時候事務B雖然不能對數據D加任何鎖,但是可以用select語句讀,B讀到了數據D=2,之后事務A出錯,回滾D=1,那你B就讀到了臟數據。
二級封鎖協議規定在一級的基礎上規定,事務A對數據D加了排它鎖,事務B想用基本的select語句讀D也必須要申請共享鎖(讀鎖)!!,而一級是不需要的!!,所以B在事務A沒結束期間都不能讀數據D,這樣就不會出現讀臟數據了!
但是二級卻不能保證可重復讀,這是因為,二級規定讀鎖是讀完就釋放!!而不是事務結束才釋放。比如B先對數據D=1加了讀鎖,讀完釋放了讀鎖,但是事務B并沒有結束,這時事務A對數據D加了寫鎖,然后修改D=2,釋放了寫鎖,這時,事務B再次對數據D申請讀鎖,讀到了D=2,同一個事務,兩次讀取不一致,這就是二級為何不能保證可重復讀!
三級就是不是讀完就釋放,而是事務結束才釋放,這樣就可保證可重復讀了。
延伸閱讀:
二、什么是數據庫
有組織且相互關聯的數據的集合稱為數據庫。database 是一個存儲數據的應用程序。它有各種應用程序,包括 MySQL、Microsoft SQL、Oracle 等。
每個數據庫都不同,因為每個公司/組織都有其結構、數據類型和約束。數據庫 會定期更新,以獲取有關公司的最新數據。
數據庫可以手動和數字方式維護。在這個數據無處不在的時代,數字數據庫是優選和使用。數據庫的大小取決于組織的數據和需求。
數據庫有很多種類型,從最簡單的存儲有各種數據的表格到能夠進行海量數據存儲的大型數據庫系統都在各個方面得到了廣泛的應用。
數據庫是“按照數據結構來組織、存儲和管理數據的倉庫”。在經濟管理的日常工作中,常常需要把某些相關的數據放進這樣“倉庫”,并根據管理的需要進行相應的處理。
例如,企業或事業單位的人事部門常常要把本單位職工的基本情況(職工號、姓名、年齡、性別、籍貫、工資、簡歷等)存放在表中,這張表就可以看成是一個數據庫。
有了這個”數據倉庫”就可以根據需要隨時查詢某職工的基本情況,也可以查詢工資在某個范圍內的職工人數等等。這些工作如果都能在計算機上自動進行,那的人事管理就可以達到極高的水平。
此外,在財務管理、倉庫管理、生產管理中也需要建立眾多的這種“數據庫”,使其可以利用計算機實現財務、倉庫、生產的自動化管理。