PostgreSQL插入數據(INSERT語句)
PostgreSQL查詢數據(SELECT語句)
PostgreSQL更新數據(UPDATE語句)
PostgreSQL刪除數據(DELETE語句)
PostgreSQL ORDER BY子句
PostgreSQL分組(GROUP BY子句)
PostgreSQL Having子句
PostgreSQL條件查詢
PostgreSQL AND條件
PostgreSQL OR條件
PostgreSQL AND & OR條件
PostgreSQL NOT條件
PostgreSQL LIKE條件
PostgreSQL IN條件
PostgreSQL NOT IN條件
PostgreSQL BETWEEN條件
PostgreSQL鎖
鎖或獨佔鎖或寫鎖阻止用戶修改行或整個表。 在UPDATE
和DELETE
修改的行在事務的持續時間內被自動獨佔鎖定。 這將阻止其他用戶更改行,直到事務被提交或回退。
用戶必須等待其他用戶當他們都嘗試修改同一行時。 如果他們修改不同的行,不需要等待。 SELECT查詢不必等待。
數據庫自動執行鎖定。 然而,在某些情況下,必須手動控制鎖定。 手動鎖定可以通過使用LOCK
命令完成。 它允許指定事務的鎖類型和範圍。
LOCK命令的語法
LOCK
命令的基本語法如下:
LOCK [ TABLE ]
name
IN
lock_mode
-
name
:要鎖定的現有表的鎖名稱(可選模式限定)。 如果在表名之前指定了ONLY
,則僅該表被鎖定 如果未指定ONLY
,則表及其所有後代表(如果有)被鎖定。 -
lock_mode
:鎖模式指定此鎖與之衝突的鎖。 如果未指定鎖定模式,則使用最嚴格的訪問模式ACCESS EXCLUSIVE
。 可能的值是:ACCESS SHARE
,ROW SHARE
,ROW EXCLUSIVE
,SHARE UPDATE EXCLUSIVE
,SHARE
,SHARE ROW EXCLUSIVE
,EXCLUSIVE
,ACCESS EXCLUSIVE
。
死鎖
當兩個事務正在等待彼此完成操作時,可能會發生死鎖。 雖然PostgreSQL可以檢測到它們並使用ROLLBACK
結束,但死鎖仍然可能不方便。 爲了防止您的應用程序遇到此問題,請確保以這樣的方式進行設計,以使其以相同的順序鎖定對象。
諮詢鎖
PostgreSQL提供了創建具有應用程序定義含義的鎖的方法。這些稱爲諮詢鎖(勸告鎖,英文爲:advisory locks)。 由於系統不強制使用它,因此應用程序正確使用它們。 諮詢鎖可用於鎖定針對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)
以下示例在ACCESS EXCLUSIVE
模式下將COMPANY
表鎖定在yiibai_db
數據庫中。 LOCK
語句僅在事務模式下工作:
yiibai_db=#BEGIN;
LOCK TABLE company1 IN ACCESS EXCLUSIVE MODE;
PostgreSQL上面的語句將產生以下結果:
LOCK TABLE
上述消息表示表被鎖定,直到事務結束並完成事務,必須回滾或提交事務。