前言:
书接上文,为大家介绍了一些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 ROLEREVOKE基本语法:
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中大多常用的基础操作就为大家介绍到这里了,从下一篇开始将为大家展开系统表以及常见的视图和使用场景,如果大家有什么好的建议通过主页的联系方式与我取得联系哈。




