暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Halo数据库用户的权限与管理2

贾桂权 2024-09-26
155

前言:

    书接上文,为大家介绍了一些create 和alter的常规操作,本片继续为大家介绍在Halo DB 14中的INSERT,DELETE,以及UPDATE和权限管理的相关操作。

一、HaloDB中的操INSERT操作

INSERT基本语法:

insert语句是用来向数据库中插入新数据的语句,常规使用用法为:

INSERT INTO 表名 (字段1, 字段2, …) VALUES (值1, 值2, …)

示例1:使用INSERT插入语句

借用本系列开篇《HaloDB 14安装部署手册》中的建表语句的其中一条给大家举例

INSERT INTO EMP VALUES
(7369,'SMITH','CLERK',7902,to_date('17-12-1980','dd-mm-yyyy'),800,NULL,20);

使用方式以及注意事项:

在使用insert语句时,需要注意以下几点:

字段和值的顺序要对应。即,第一个字段对应第一个值,第二个字段对应第二个值,以此类推。

插入的值必须与表中字段的数据类型相符。如果不符,则会插入失败。

如果插入的值为字符串类型,需要使用单引号将其括起来。例如,'张三'。

如果插入的值为数值类型,不需要使用单引号将其括起来。例如,20。

应用场景:

insert语句在数据库中有着广泛的应用场景,下面列举几个常见的应用场景:

向空表中插入新数据。当一个表中还没有任何数据时,我们可以使用insert语句插入新数据。

向已有数据的表中插入新数据。如果我们需要向一个已存在的表中插入新的数据,可以使用insert语句。

批量插入数据。如果需要向表中插入大量数据,可以使用insert语句的批量插入方式,可以大大提高插入数据的效率。

二、HaloDB中的UPDATE操作

UPDATE基本语法:

UPDATE table_name
SET column1 = value1, column2 = value2...., columnN = valueN
WHERE [condition];

注意:

我们可以同时更新一个或者多个字段。

我们可以在 WHERE 子句中指定任何条件。

示例2:使用UPDATE更改数据:

这里为了更直观 我用截图给大家展示。

更改前的emp表:

使用update对目标数据进行UPDATE操作:

testzz=# update emp set ename = 'HALOZZ' WHERE mgr = '7902';
UPDATE 1

更改后结果查询:

三、HaloDB中的DELETE操作

DELETE基本语法:

在我们的HaloDB中,可以使用 DELETE 语句来删除 PostgreSQL 表中的数据,使用方法如下所示:

DELETE FROM table_name WHERE [condition];

table_name:所需要删除的表名。

注意:

如果没有指定 WHERE 子句,在我们的HaloDB 表中的所有记录将被删除。一般我们需要在 WHERE 子句中指定条件来删除对应的记录,条件语句可以使用 AND 或 OR 运算符来指定一个或多个。

示例3:使用delete删除整张表:

--新建一张emp1表
testzz=# create table emp1 as select * from emp;
SELECT 12
--检查创建的新表emp1
testzz=# select * from emp1;
empno | ename | job | mgr | hiredate | sal | comm | deptno
-------+--------+-----------+------+------------+------+------+--------
7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600 | 300 | 30
7521 | WARD | SALESMAN | 7698 | 1981-02-22 | 1250 | 500 | 30
7566 | JONES | MANAGER | 7839 | 1981-04-02 | 2975 | | 20
7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 | 1250 | 1400 | 30
7698 | BLAKE | MANAGER | 7839 | 1981-05-01 | 2850 | | 30
7782 | CLARK | MANAGER | 7839 | 1981-06-09 | 2450 | | 10
7839 | KING | PRESIDENT | | 1981-11-17 | 5000 | | 10
7844 | TURNER | SALESMAN | 7698 | 1981-09-08 | 1500 | 0 | 30
7900 | JAMES | CLERK | 7698 | 1981-12-03 | 950 | | 30
7902 | FORD | ANALYST | 7566 | 1981-12-03 | 3000 | | 20
7934 | MILLER | CLERK | 7782 | 1982-01-23 | 1300 | | 10
7369 | HALOZZ | CLERK | 7902 | 1980-12-17 | 800 | | 20
(12 rows)
--使用delete删除整张表
testzz=# delete from emp1;
DELETE 12
--查询删除后的emp1表
testzz=# select * from emp1;
empno | ename | job | mgr | hiredate | sal | comm | deptno
-------+-------+-----+-----+----------+-----+------+--------
(0 rows)

这里需要注意 delete 删除表的话仅仅会删除表中的数据,不会清理表结构,使用select 查询 依旧会返回结果。

如果想彻底删除emp1表,请使用drop table字句。

testzz=# drop table emp1;
DROP TABLE
testzz=# select * from emp1;
2024-01-08 23:48:01.742 CST [8704] ERROR: relation "emp1" does not exist at character 16
2024-01-08 23:48:01.742 CST [8704] STATEMENT: select * from emp1;
ERROR: relation "emp1" does not exist
LINE 1: select * from emp1;

示例4:使用delete删除表中某一行或者某几行数据:

testzz=# select * from emp1;
empno | ename | job | mgr | hiredate | sal | comm | deptno
-------+--------+-----------+------+------------+------+------+--------
7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600 | 300 | 30
7521 | WARD | SALESMAN | 7698 | 1981-02-22 | 1250 | 500 | 30
7566 | JONES | MANAGER | 7839 | 1981-04-02 | 2975 | | 20
7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 | 1250 | 1400 | 30
7698 | BLAKE | MANAGER | 7839 | 1981-05-01 | 2850 | | 30
7782 | CLARK | MANAGER | 7839 | 1981-06-09 | 2450 | | 10
7839 | KING | PRESIDENT | | 1981-11-17 | 5000 | | 10
7844 | TURNER | SALESMAN | 7698 | 1981-09-08 | 1500 | 0 | 30
7900 | JAMES | CLERK | 7698 | 1981-12-03 | 950 | | 30
7902 | FORD | ANALYST | 7566 | 1981-12-03 | 3000 | | 20
7934 | MILLER | CLERK | 7782 | 1982-01-23 | 1300 | | 10
7369 | HALOZZ | CLERK | 7902 | 1980-12-17 | 800 | | 20
(12 rows)
--删除 empno数值为7499的行
testzz=# delete from emp1 where empno = '7499';
DELETE 1
--查询结果
testzz=# select * from emp1;
empno | ename | job | mgr | hiredate | sal | comm | deptno
-------+--------+-----------+------+------------+------+------+--------
7521 | WARD | SALESMAN | 7698 | 1981-02-22 | 1250 | 500 | 30
7566 | JONES | MANAGER | 7839 | 1981-04-02 | 2975 | | 20
7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 | 1250 | 1400 | 30
7698 | BLAKE | MANAGER | 7839 | 1981-05-01 | 2850 | | 30
7782 | CLARK | MANAGER | 7839 | 1981-06-09 | 2450 | | 10
7839 | KING | PRESIDENT | | 1981-11-17 | 5000 | | 10
7844 | TURNER | SALESMAN | 7698 | 1981-09-08 | 1500 | 0 | 30
7900 | JAMES | CLERK | 7698 | 1981-12-03 | 950 | | 30
7902 | FORD | ANALYST | 7566 | 1981-12-03 | 3000 | | 20
7934 | MILLER | CLERK | 7782 | 1982-01-23 | 1300 | | 10
7369 | HALOZZ | CLERK | 7902 | 1980-12-17 | 800 | | 20
(11 rows)
--删除名为WARD,JONES的两行
testzz=# delete from emp1 where ename IN ('WARD','JONES');
DELETE 2
--查询结果
testzz=# select * from emp1;
empno | ename | job | mgr | hiredate | sal | comm | deptno
-------+--------+-----------+------+------------+------+------+--------
7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 | 1250 | 1400 | 30
7698 | BLAKE | MANAGER | 7839 | 1981-05-01 | 2850 | | 30
7782 | CLARK | MANAGER | 7839 | 1981-06-09 | 2450 | | 10
7839 | KING | PRESIDENT | | 1981-11-17 | 5000 | | 10
7844 | TURNER | SALESMAN | 7698 | 1981-09-08 | 1500 | 0 | 30
7900 | JAMES | CLERK | 7698 | 1981-12-03 | 950 | | 30
7902 | FORD | ANALYST | 7566 | 1981-12-03 | 3000 | | 20
7934 | MILLER | CLERK | 7782 | 1982-01-23 | 1300 | | 10
7369 | HALOZZ | CLERK | 7902 | 1980-12-17 | 800 | | 20
(9 rows)

四、HaloDB 中的GRANT和REVOKE操作:

GRANT基本语法:

GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
[, ...] | ALL [ PRIVILEGES ] }
ON { [ TABLE ] table_name [, ...]
| ALL TABLES IN SCHEMA schema_name [, ...] }
TO role_specification [, ...] [ WITH GRANT OPTION ]
[ GRANTED BY role_specification ]

GRANT的作用主要在于对角色和用户进行授权操作。一般包括以下几种场景:

示例5:将系统权限授权给角色或用户:

halo0root=# GRANT ALL PRIVILEGES ON DATABASE halozz1 TO halo;
GRANT

示例6:将数据库对象授权给角色或用户:

GRANT SELECT, INSERT, UPDATE, DELETE ON your_table_name TO your_role_or_user;
testzz=# GRANT SELECT, INSERT, UPDATE, DELETE ON emp TO halo;
GRANT

示例7:将角色或用户的权限授权给其他角色或用户:

halo0root=# SELECT usename FROM pg_user;
usename
------------
halo
halozz
halozztest
(3 rows)

testzz=# GRANT halo TO halozz;
GRANT ROLE

REVOKE基本语法:

REVOKE [ GRANT OPTION FOR ]
{ { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
[, ...] | ALL [ PRIVILEGES ] }
ON { [ TABLE ] table_name [, ...]
| ALL TABLES IN SCHEMA schema_name [, ...] }
FROM role_specification [, ...]
[ GRANTED BY role_specification ]
[ CASCADE | RESTRICT ]

示例8:回收系统权限授权给角色或用户:

testzz=# REVOKE ALL PRIVILEGES ON DATABASE halozz1 FROM halo;
REVOKE

示例9:回收数据库对象角色或用户

testzz=# revoke SELECT, INSERT, UPDATE, DELETE ON emp from halo;
REVOKE

示例10:回收授权给其他角色或用户的权限

testzz=# REVOKE halo from halozz;
REVOKE ROLE

结尾:

HaloDB中大多常用的基础操作就为大家介绍到这里了,从下一篇开始将为大家展开系统表以及常见的视图和使用场景,如果大家有什么好的建议通过主页的联系方式与我取得联系哈。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论