1. 程式人生 > 實用技巧 >【學習筆記】PostgreSQL進階技巧之事務、鎖和許可權

【學習筆記】PostgreSQL進階技巧之事務、鎖和許可權

這一節主要包含如下內容:

  • 事務
  • 許可權

一、事務

說明:

事務是對資料庫執行的工作單元。事務是以邏輯順序完成的工作的單位或順序,無論是使用者手動的方式還是通過某種資料庫程式自動執行。

語法:
1.BEGIN TRANSACTION命令
說明:

可以使用BEGIN TRANSACTION或簡單的BEGIN命令來開始事務。 這樣的事務通常會持續下去,直到遇到下一個COMMIT或ROLLBACK命令。 但如果資料庫關閉或發生錯誤,則事務也將ROLLBACK。

2.COMMIT命令

COMMIT命令是用於將事務呼叫的更改儲存到資料庫的事務命令。
COMMIT命令自上次的COMMIT或ROLLBACK命令後將所有事務儲存到資料庫。

3.ROLLBACK命令

ROLLBACK命令是用於還原尚未儲存到資料庫的事務的事務命令。自上次發出COMMIT或ROLLBACK命令以來,ROLLBACK命令只能用於撤銷事務。

示例:

begin;
delete from employees where age=25;
select * from employees;
rollback;
select * from employees;

結果:
首先age=25的列被刪除,隨即又被rollback回來。

二、鎖

語法:

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。
    死鎖:當兩個事務正在等待彼此完成操作時,可能會發生死鎖。
    諮詢鎖:具有應用程式定義含義的鎖。
    示例:
lock table employees1 in access exclusive mode;

三、許可權

說明:

在資料庫中建立物件時,都會為其分配所有者。 所有者通常是執行建立語句的使用者。 對於大多數型別的物件,初始狀態是隻有所有者(或超級使用者)可以修改或刪除物件。 要允許其他角色或使用者使用它,必須授予許可權或許可權。

1.GRANT(授予許可權)

語法:

GRANT privilege [,...]
ON object [,...]
TO{ PUBLIC | GROUP group | username };

引數說明:

  • privilege值可以是:SELECT,INSERT,UPDATE,DELETE,RULE,ALL。
  • object:要向其授予訪問許可權的物件的名稱。 可能的物件是:表,檢視,序列
  • PUBLIC:表示所有使用者的簡短形式。
  • GROUP group:授予許可權的組。
  • username:授予許可權的使用者的名稱。 PUBLIC是表示所有使用者的簡短形式。

2.REVOKE(撤銷許可權)

語法:

REVOKE privilege [,...]
ON object [,...]
FROM{ PUBLIC|GROUPgroupname |username };

示例:(建立新的使用者manisha,賦予她所有查詢employees的許可權,然後撤銷許可權)

CREATE USER manisha WITH PASSWORD 'password';
GRANT ALL ON employees TO manisha;
REVOKE ALL ON employees TO manisha;