鎖主要是為了保持資料庫資料的一致性,可以阻止使用者修改一行或整個表,一般用在併發較高的資料庫中。
在多個使用者非同步訪問資料庫時,如果不對其進行限制可能會出現讀取資料和儲存資料的不一致性。
資料庫中有兩種基本的鎖:共享鎖
(share)、排它鎖
(exclusive)。
如果資料物件加上排它鎖
,則其他的事務不能
對它讀取
和修改
。
如果加上鎖的基本語法:lock [ table ] name in lock_mode共享鎖
,則該資料庫物件可以
被其他事務讀取
,但不能修改
。
即以某種模式去鎖定某張表,lock_mode有access share,row share, row exclusive, share update exclusive, share,share row exclusive,exclusive,access exclusive等,具體格式可參考:postgresql鎖模式
獲得鎖之後,鎖一般情況下都會繼續保持,並且總是在事務結束時釋放(包括事務提交和事務回滾)。
上述介紹通常是用於表級鎖,下面簡單介紹一下行級鎖。
與表級鎖不同的是,行級鎖不阻塞對於資料的查詢,行級鎖只是阻塞對同一行的寫入。
要在不修改某行的前提下請求乙個排斥行級鎖
,用select for update
選取該行。一旦我們請求了特定的行級鎖,就可以在事務中進行多次更新而不用擔心衝突。
要在某一行請求乙個共享行級鎖
,用select for share
選取該行。乙個共享鎖並不阻止其他的事務請求同乙個共享鎖,不過,其他事務不允許更新、刪除或者使用排斥鎖鎖住持有共享鎖的行。任何其他企圖都會被鎖住等待共享鎖的釋放。
改進PostgreSQL鎖機制
如果你想構建乙個大規模的 單憑橫向擴充套件web伺服器是遠遠不夠的。如何巧妙地管理資料庫也是非常必要的。在postgresql中,借助於併發性的改進,通過減少鎖及加速執行得到若干令人滿意的特性。如果你想構建乙個大規模的 單憑橫向擴充套件web伺服器是遠遠不夠的。如何巧妙地管理資料庫也是非常必要的。鎖...
測試postgreSQL中表鎖
檢視視窗連線到的服務程序的pid。select pg backend pid 三個視窗的pid分別如下 select locktype,relation regclass,virtualxid,transactionid,virtualtransaction pid,mode,granted fro...
postgresql解決鎖表
查詢是否鎖表了 select oid from pg class where relname 可能鎖表了的表 select pid from pg locks where relation 上面查出的oid 如果查詢到了結果,表示該錶被鎖 則需要釋放鎖定 select pg cancel backe...