1. 程式人生 > >資料庫鎖機制實現隔離

資料庫鎖機制實現隔離

資料庫隔離級別 及 其實現原理 1.資料庫能實現對資料操作的四種隔離級別的原理就是通過對資料進行加鎖來實現的(行級鎖和表級鎖),但是鎖又分為共享鎖和排他鎖
共享鎖(S鎖)和排它鎖(X鎖) 共享鎖【S鎖】 又稱讀鎖,若事務T對資料物件A加上S鎖,則事務T可以讀A但不能修改A,其他事務只能再對A加S鎖,而不能加X鎖,直到T釋放A上的S鎖。這保證了其他事務可以讀A,但在T釋放A上的S鎖之前不能對A做任何修改。 排他鎖【X鎖】 又稱寫鎖。若事務T對資料物件A加上X鎖,事務T可以讀A也可以修改A,其他事務不能再對A加任何鎖,直到T釋放A上的鎖。這保證了其他事務在T釋放A上的鎖之前不能再讀取和修改A。
死鎖的產生原理:
因為共享鎖可以被多個事物同時施加所以才會產生死鎖產生 舉例:兩個事物A和B,如果事物A對一個資源加上了共享鎖,這時事物B也對該資源加上了共享鎖,這時如果事物A想要修改該資料就必須對他加上排他鎖,所有就必須等待事物B釋放他自身的共享鎖,同樣,事物B也想要修改該資源也同樣在等待者事物A釋放他自身的共享鎖,這樣就會產生兩個事物在互相的等待對方釋放鎖而產生死鎖現象 (這個例子只是產生死一種場景) 避免死鎖: 其中最具有代表性的 避免死鎖演算法 銀行家演算法 解除死鎖: 當發現有程序死鎖後,便應立即把它從死鎖狀態中解脫出來,常採用的方法有: 剝奪資源:從其它程序剝奪足夠數量的資源給死鎖程序,以解除死鎖狀態; 撤消程序:可以直接撤消死鎖程序或撤消代價最小的程序,直至有足夠的資源可用,死鎖狀態.消除為止;所謂代價是指優先順序、執行代價、程序的重要性和價值等。 (4). 使用較低的隔離級別。(注:使用較低的隔離級別(例如已提交讀)比使用較高的隔離級別(例如可序列化)持有共享鎖的時間更短,減少鎖競爭)

事物的四種隔離級別 1、Read uncommitted:對資料進行行級加鎖(行級鎖) 2、Read committed :對資料進行行級加鎖(行級鎖) 3、Repeated  Read :對資料進行行級加鎖(行級鎖) 4、serializable:對資料進行表級加鎖(表級鎖)
由於程式只要對資料庫資料進行操作,包括讀取操作都是必須要先對操作的資料進行加鎖之後才能操作,所以資料庫的隔離級別機制原理就是通過對資料進行加不同的鎖來操作的