程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> PostgreSQL >> PostgreSQL鎖

PostgreSQL鎖

編輯:PostgreSQL

鎖或獨占鎖或寫鎖,防止用戶修改行或整個表。然後,UPDATE和DELETE修改行獨占鎖定自動的事務的持續時間。這可以防止其他用戶更改行,直到該事務被提交或回滾。

有時候用戶必須等待其他用戶:當他們正試圖修改同一行,如果他們修改不同的行,無需等待。 SELECT查詢從來沒有等待。   數據庫自動進行鎖定。然而,在某些情況下,鎖定必須手動控制。手動鎖定可以通過使用LOCK命令。它允許指定的事務的鎖的類型和范圍。

LOCK命令的語法

LOCK命令的基本語法如下:

LOCK [ TABLE ]
name
 IN
lock_mode
  • name: 鎖現有的表的名稱(可以有模式修飾)。如果只指定表名前,只有表被鎖定。如果未指定,表和所有其派生表(如果有的話)被鎖定。

  • lock_mode: 鎖模式聲明這個鎖鎖定的沖突。如果沒有鎖模式被指定,那麼ACCESS EXCLUSIVE,最嚴格的模式使用。可能的值有:ACCESS SHARE,ROW SHARE,ROW EXCLUSIVE,SHARE UPDATE EXCLUSIVE,SHARE,SHARE ROW EXCLUSIVE,EXCLUSIVE,ACCESS EXCLUSIVE。

一旦獲得,該鎖被保持在當前事務。沒有UNLOCK TABLE命令的鎖總是在事務結尾釋放。

死鎖

會發生死鎖當兩個事務都在等待對方完成他們的業務。盡管PostgreSQL可以檢測到它們,他們用ROLLBACK結束,死鎖仍然會帶來不便。為了防止您的應用程序運行到這個問題,確保他們以這樣的方式,他們將鎖定對象以相同的順序設計。

咨詢鎖

PostgreSQL提供了裝置,用於創建應用程序定義的含義的鎖。這些被稱為咨詢鎖。由於該系統不強制它們的使用 - 它是由應用程序正確地使用它們。咨詢鎖可用於鎖定策略,是一個尴尬的MVCC模型適合。

例如,咨詢鎖是一個常見的用途是模擬典型的所謂“平面文件”數據管理系統的悲觀鎖定策略。可用於同樣的目的而存儲在表中的標志,咨詢鎖快,避免表臃腫,並在會話結束時由服務器自動清理。

實例

考慮表COMPANY 有如下記錄:

testdb# select * from COMPANY;
 id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000
(7 rows)

下面的例子鎖定本公司表內testdb數據庫ACCESS EXCLUSIVE模式。的鎖定語句只在的事務模式:

testdb=#BEGIN;
LOCK TABLE company1 IN ACCESS EXCLUSIVE MODE;

以上PostgreSQL的表會產生以下結果:

LOCK TABLE

上述消息表明,該表已被鎖定,直到事務結束並完成的事務,將回滾或提交事務。



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved