【学习笔记】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;

猜你喜欢

转载自www.cnblogs.com/echizen/p/13379358.html
今日推荐