【學習筆記】PostgreSQL進階技巧之事務、鎖和許可權
阿新 • • 發佈:2020-07-26
這一節主要包含如下內容:
- 事務
- 鎖
- 許可權
一、事務
說明:
事務是對資料庫執行的工作單元。事務是以邏輯順序完成的工作的單位或順序,無論是使用者手動的方式還是通過某種資料庫程式自動執行。
語法:
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;