1.1表
表是数据库中数据存储的基本单元,是对用户数据进行读和操纵的逻辑实体。表由列和行组成,每一行代表一个单独的记录。表中包含一组固定的列,表中的列描述该表所跟踪的实体的属性,每个列都有一个名字及各自的特性。
1.1.1创建表
1.1.1.1指定表的聚集索引
CREATE TABLE STUDENT( STUNO INT CLUSTER PRIMARY KEY, STUNAME VARCHAR(15) NOT NULL, TEANO INT, CLASSID INT );
其中DM 提供三种方式供用户指定聚集索引键:
第一种:CLUSTER PRIMARY KEY:指定列为聚集索引键,并同时指定为主键,称为聚集主键;
第二种:CLUSTER KEY:指定列为聚集索引键,但是是非唯一的;
第三种:CLUSTER UNIQUE KEY:指定列为聚集索引键,并且是唯一的。
1.1.1.2查询建表
为了创建一个与已有表相同的新表,或者为了创建一个只包含另一个表的一些行和列的新表
CREATE TABLE NEW_EMP AS SELECT * FROM EMPLOYEE;
1.1.1.2创建临时表
DM 临时表支持以下功能:
在临时表中,会话可以像普通永久表一样更新、插入和删除数据;
临时表的 DML 操作产生较少的 REDO 日志;
临时表支持建索引,以提高查询性能;
在一个会话或事务结束后,数据将自动从临时表中删除;
不同用户可以访问相同的临时表,每个用户只能看到自己的数据;
临时表的数据量很少,意味着更高效的查询效率;
临时表的表结构在数据删除后仍然存在,便于以后的使用;
临时表的权限管理跟普通表一致。
CREATE GLOBAL TEMPORARY TABLE TMP_EMP( EMPNO INT PRIMARY KEY, ENAME VARCHAR(15) NOT NULL, JOB VARCHAR(10)) ON COMMIT DELETE ROWS;
1.1.2修改表
通过修改表,用户可以对数据库中的表作如下修改:
a.添加或删除列,或修改现有的列的定义;
b.添加、修改或删除与表相关的完整性约束;
c.重命名一个表;
d.启动或停用与表相关的完整性约束;
e.启动或停用与表相关的触发器;
f.修改表的 SPACE LIMIT;
g.增删自增列。
1.1.3删除表
当一个表不再使用时,可以将其删除。删除表时,将产生以下结果:
表的结构信息从数据字典中删除,表中的数据不可访问;
表上的所有索引和触发器被一起清除;
所有建立在该表上的同义词、视图和存储过程变为无效;
所有分配给表的簇标记为空闲,可被分配给其他的数据库对象。
删除 employee 表:
Copy DROP TABLE employee;
删除不存在的表会报错;若指定 IF EXISTS 关键字,则不会报错,如:
Copy DROP TABLE IF EXISTS employee;
如果要删除的表被其他表引用,即其他表的外键引用了表的任何主键或唯一键,则需要在 DROP TABLE 语句中包含 CASCADE 选项,如:
Copy DROP TABLE employee CASCADE;
1.1.4删除表
第一种:使用DELETE;注意:使用DELETE 清空表,当表有很多行时,会消耗很多系统资源。
Copy DELETE FROM employee;
第二种:使用DROP和CREATE;使用DROP删除一个表,然后创建一个同名的表,也可以达到清空表的效果。
Copy DROP TABLE employee;
CREATE TABLE employee(…);
第三种:使用TRUNCATE,一种快速、有效地删除表所有行的方法。执行 TRUNCATE 会立即提交,而且不能回滚
Copy TRUNCATE TABLE employee;
1.2视图
视图是关系数据库系统提供给用户以多种角度观察数据库中数据的重要机制,它简化了用户数据模型,提供了逻辑数据独立性,实现了数据共享和数据的安全保密。
视图是从一个或几个基表(或视图)导出的表,但它是一个虚表,即数据字典中只存放视图的定义(由视图名和查询语句组成),而不存放对应的数据,这些数据仍存放在原来的基表中
创建视图
CREATE OR REPLACE VIEW normal_view AS SELECT * FROM t1;
创建只读视图
CREATE or replace VIEW read_only_view AS SELECT * FROM t1 with read only;
删除视图
drop view if exists normal_view;
编译视图
alter view normal_view2 COMPILE;
1.3索引
索引是为了快速检索和定位数据行而创建的一种数据结构。索引相当于一本书的目录,根据目录中的页码标识快速检索并定位到的查找内容。创建或删除一个索引,不会影响基表、数据库应用或其它索引。
索引分类:
a.聚集索引和非聚集索引
b.功能索引
c.虚索引和实索引
d.单索引和复合索引
e.全局索引和局部索引
1.3.1聚集索引和非聚集索引
a.聚集索引(又称为一级索引、主索引):聚集索引就是按照聚集索引键构造一棵 B+ 树,表数据存储在 B+ 树叶子节点上,通过定位索引可直接在 B+ 树中找到数据。每一个表有且只有一个聚集索引。
b.非聚集索引(又称为二级索引、辅助索引):将二级索引列和聚集索引列共同存储在 B+ 树叶子节点上。如果查找非聚集索引键值或聚集索引键值可直接在 B+ 树中找到;如果查找索引键值以外的数据,则需要回到一级索引中进行查找。每一个表可以有多个非聚集索引。
创建聚集索引:
CREATE TABLE T1 (ID int,NAME varchar(20),DEPARTMENT varchar(20));
创建非聚集索引:
CREATE INDEX S1 on T1(NAME);
1.3.2功能索引
功能索引分类:
唯一索引:索引数据根据索引键唯一;
函数索引:包含函数/表达式的预先计算的值;
位图索引:对低基数的列创建位图索引;
位图连接索引:针对两个或者多个表连接的位图索引,主要用于数据仓库中;
全文索引:在表的文本列上而建的索引。
空间索引:在空间数据上创建的索引,专用于 DMGEO 包中;
数组索引:在一个只包含单个数组成员的对象列上创建的索引;
普通索引:除了唯一索引、函数索引、位图索引、位图连接索引、全文索引、空间索引、数组索引以外的索引,均为普通索引。
1.3.3虚索引和实索引
虚索引:指不存储数据的索引。虚索引由系统自动并隐式地创建,目的是保证约束的正确性。
实索引:指存储数据的索引。虚索引以外的索引均为实索引。
1.3.4单索引和复合索引
从索引键值的个数进行分类,可分为单列索引和复合索引。
单列索引:只有一个索引键的索引。
复合索引:含有多个索引键的索引
1.3.5全局索引和局部索引
全局索引和局部索引均为二级索引,专门用于水平分区表中。
全局索引:全局索引是以整张表的数据为对象而建立的索引。
局部索引:局部索引是在分区表的每个分区上创建的索引。
1.3.6重建及删除索引
重建索引
SP_REBUILD_INDEX(SCHNAME varchar(128), INDEXID int);
SP_REBUILD_INDEX(‘SYSDBA’, 索引 ID );
删除索引
DROP INDEX IF EXISTS emp_ename;
1.4触发器
DM 是一个具有主动特征的数据库管理系统,其主动特征包括约束机制和触发器机制。约束机制主要用于对某些列进行有效性和完整性验证;触发器(TRIGGER)定义当某些与数据库有关的事件发生时,数据库应该采取的操作。
触发器是一种特殊的存储过程,它在创建后就存储在数据库中。触发器的特殊性在于它是建立在某个具体的表或视图之上的,或者是建立在各种事件前后的,而且是自动激发执行的,如果用户在这个表上执行了某个 DML 操作(INSERT、DELETE、UPDATE),触发器就被激发执行。
触发器常用于自动完成一些数据库的维护工作。例如:
a.可以对表自动进行复杂的安全性、完整性检查;
b.可以在对表进行 DML 操作之前或者之后进行其它处理;
c.进行审计,可以对表上的操作进行跟踪;
d.实现不同节点间数据库的同步更新。
DM 提供了三种类型的触发器:
a.表级触发器:基于表中的数据进行触发;
b.事件触发器:基于特定系统事件进行触发;
c.时间触发器:基于时间而进行触发。
before and delete 触发器
CREATE OR REPLACE TRIGGER bef_del
2 BEFORE DELETE ON t_triger
3 FOR EACH ROW
4 BEGIN
5 PRINT ‘您正在对表 t_triger 进行删除操作,被删除记录 id:’||:old.id;
6 END;
7 /
after and insert 触发器
CREATE OR REPLACE TRIGGER aft_insert
2 after insert ON t_triger
3 FOR EACH ROW
4 BEGIN
5 PRINT ‘您正在对表 t_triger 进行新增操作,新记录 id 为:’||:new.id;
6 END;
7 /
创建时间触发器
CREATE OR REPLACE TRIGGER timer2
3 AFTER TIMER ON DATABASE
4 FOR EACH 1 MONTH DAY 28
5 FROM TIME ‘09:00’ TO TIME ‘18:00’ FOR EACH 1 MINUTE
6 DECLARE
7 str VARCHAR;
8 BEGIN
9 PRINT ‘HELLO WORLD’;
10 END;
11 /
删除触发器
DROP TRIGGER [IF EXISTS] 触发器名;
1.5序列
序列(sequence)是 DM 数据库中的数据库实体之一。通过使用序列,多个用户可以产生和使用一组不重复的有序整数值。序列通过提供唯一数值的顺序表来简化程序设计工作。使用一个序列时,不保证将生成一串连续不断递增的值。
创建序列
create sequence if not exists seq_1
2 start with 1
3 increment by 1
4 minvalue 1
5 maxvalue 10000
6 cycle
7 cache 5
8 order;
修改序列最大值
alter sequence seq_1 maxvalue 999999;
删除序列
drop sequence seq_2;
1.6同义词
同义词相当于模式对象的别名,起着连接数据库模式对象和应用程序的作用。
创建全局同义词
create or replace public synonym if not exists syn_t1 for sysdba.t1;
创建非全局同义词
create or replace synonym if not exists sysdba.syn_t2 for sysdba.t1;
查询同义词
select * from syn_t1;
删除全局同义词
drop public synonym syn_t1;
删除非全局同义词
drop synonym syn_t2;
2.1用户
2.1.1三权分立和四权分立
“三权分立”的安全机制,将系统管理员分为数据库管理员、数据库安全员和数据库审计员三类。“四权分立”的安全机制,是在“三权分立”的基础上,新增数据库对象操作员账户 SYSDBO。
2.1.1.1数据库管理员(DBA)
“三权分立”的安全机制,每个DM 数据库至少需要一个数据库管理员来管理,负责评估数据库运行所需的软、硬件环境、安装和升级 DM 数据库、配置 DM 数据库参数、创建主要的数据库存储结构(表空间)和对象(如表、视图、索引、角色、用户等)、监控和优化数据库性能、数据导入导出以及数据库的备份和恢复等。
2.1.1.2数据库安全员(SSO)
在很多大型的系统中,安全性还是至关重要的,有必要由安全员来制定安全策略,强化系统安全机制,此时数据库安全员的主要任务就是制定安全策略,定义新的数据库安全员,设置系统的安全等级、范围和组,并为主、客体定义安全标记,从而全面提升系统安全性。
2.1.1.3数据库审计员(AUDITOR)
数据库审计员可以设置要审计的对象和操作、定义新的数据库审计员、查看和分析审计记录。通过设置审计,几乎可以跟踪任何人在系统内执行的任何操作,为事后追查提供便利。
2.1.1.4数据库对象操作员(DBO)
数据库对象操作员是“四权分立”新增加的一类用户,可以创建数据库对象,并对自己拥有的数据库对象(表、视图、存储过程、序列、包、外部链接)具有所有的对象权限并可以授出与回收,但其无法管理与维护数据库对象。
创建用户
CREATE USER ops_user IDENTIFIED BY “Ops@123456”;
修改密码
ALTER USER ops_user IDENTIFIED BY “New@pass123”;
锁定用户
ALTER USER ops_user ACCOUNT LOCK;
解锁用户
ALTER USER ops_user ACCOUNT UNLOCK;
删除用户
DROP USER ops_user;
设置默认表空间
ALTER USER ops_user DEFAULT TABLESPACE TBS_OPs;
2.2角色
创建角色
CREATE ROLE <角色名>;
为角色授予权限
GRANT <系统权限或角色名> TO <角色名>;
GRANT <对象权限> ON <模式名.对象名> TO <角色名>;
将角色授予用户
GRANT <角色名> TO <用户名>;
回收角色权限或从用户回收角色
REVOKE <角色名> FROM <用户名>;
REVOKE <权限> ON <模式名.对象名> FROM <角色名>;
REVOKE <系统权限> FROM <角色名>;
2.3权限
达梦数据库权限体系分为:数据库(系统)权限和对象权限的管理
2.3.1数据库权限(系统权限)
数据库权限,也称为系统权限,是执行特定数据库级操作(如创建表、创建用户、备份数据库等)的权限。这类权限通常是针对某种“操作”的能力。
2.3.2数据库权限的分配与回收
2.3.2.1分配 (GRANT):
授予单个系统权限给用户
GRANT CREATE TABLE TO user1;
授予多个系统权限给用户
GRANT CREATE TABLE, CREATE VIEW, CREATE PROCEDURE TO user1;
授予系统权限给角色
GRANT CREATE USER, ALTER USER TO role_security_admin;
授予角色给用户(这是最常见的授权方式)
GRANT RESOURCE TO user1;
授予权限并允许接收者进一步授权给他人- 请谨慎使用!
GRANT CREATE TABLE TO user1 WITH ADMIN OPTION;
2.3.2.2回收 (REVOKE):
从用户回收单个系统权限
REVOKE CREATE TABLE FROM user1;
从用户回收多个系统权限
REVOKE CREATE TABLE, CREATE VIEW FROM user1;
从角色回收系统权限
REVOKE CREATE USER FROM role_security_admin;
从用户回收角色
REVOKE RESOURCE FROM user1;
2.3.2对象权限
对象权限是针对特定数据库对象(如表、视图、序列、存储过程等)的操作权限。这类权限是“数据”层面的控制。
对象权限的分配与回收
分配 (GRANT):
授予某个表上的特定权限给用户
GRANT SELECT, INSERT ON SYSDBA.employees TO user1;
授予某个表上的所有权限给用户
GRANT ALL ON SYSDBA.employees TO user1;
授予执行存储过程的权限给用户
GRANT EXECUTE ON SYSDBA.calculate_bonus TO user1;
授予序列使用权限给用户(SELECT权限允许使用NEXTVAL和CURRVAL)
GRANT SELECT ON SYSDBA.seq_employee_id TO user1;
授予权限给角色
GRANT SELECT ON SYSDBA.employees TO role_report;
授予权限并允许接收者进一步授权给他人 (WITH GRANT OPTION)
GRANT SELECT ON SYSDBA.employees TO user1 WITH GRANT OPTION;
回收 (REVOKE):
从用户回收某个表上的特定权限
REVOKE INSERT ON SYSDBA.employees FROM user1;
从用户回收某个表上的所有权限
REVOKE ALL ON SYSDBA.employees FROM user1;
从用户回收执行存储过程的权限
REVOKE EXECUTE ON SYSDBA.calculate_bonus FROM user1;
从角色回收对象权限-级联回收
REVOKE SELECT ON SYSDBA.employees FROM role_report;
2.4表空间
表空间是数据库的逻辑存储单元,将数据组织起来并映射到物理数据文件上,对数据库的性能、可维护性和安全性都有很大影响。
2.4.1普通表空间
2.4.1.1 创建表空间
创建表空间的核心是 CREATE TABLESPACE 语句。创建表空间通常需要由 SYSDBA用户或其他具有相应权限的用户执行。
CREATE TABLESPACE <表空间名> DATAFILE ‘<数据文件路径>’ SIZE <文件大小>;
创建一个简单的表空间:
CREATE TABLESPACE TBS1 DATAFILE ‘/dm8/data/DAMENG/TBS01.DBF’ SIZE 128;
这条命令创建了一个名为 TBS1 的表空间,其对应的物理数据文件是 ‘/dm8/data/DAMENG/TBS01.DBF’,初始大小为 128MB。
创建时可指定更多选项(推荐):
CREATE TABLESPACE TBS1 DATAFILE ‘/dm8/data/DAMENG/TBS01.DBF’ SIZE 128
AUTOEXTEND ON – 允许自动扩展
NEXT 50 – 每次自动扩展50MB
MAXSIZE 20480 – 最大扩展到20480MB,也可设置为 UNLIMITED(无限制)
CACHE = NORMAL; – 使用NORMAL缓冲区(可选KEEP)
创建表空间时,数据文件的初始大小(SIZE) 必须满足一个硬性条件:至少是数据库页大小(Page Size) 的4096倍。页大小在初始化数据库实例时确定,且不可更改。
2.4.1.2查询数据库页大小
SELECT PAGE();
查看表空间信息
SELECT TABLESPACE_NAME, STATUS FROM DBA_TABLESPACES;
STATUS: ONLINE(联机)或 OFFLINE(脱机)。
2.4.1.3扩展表空间
扩展已有数据文件的大小:
ALTER TABLESPACE TBS1 RESIZE DATAFILE ‘表空间路径’ TO 256;
修改数据文件的自动扩展属性:
ALTER TABLESPACE TBS1 DATAFILE ‘表空间路径’ AUTOEXTEND ON NEXT 100 MAXSIZE 10240;
2.4.1.4删除表空间
删除空的表空间:
DROP TABLESPACE TBS1;
如果表空间非空(包含表、索引等对象),则必须使用 CASCADE 选项:
DROP TABLESPACE TBS1 CASCADE;
2.4.2 HUGE 表空间
HUGE 表是达梦数据库为海量数据分析设计的列式存储表。
2.4.2.1创建 HUGE 表空间
CREATE HUGE TABLESPACE HTBS1 PATH ‘/home/dmdba/dmdbms/DAMENG/HTBS1’;
2.4.2.2在 HUGE 表空间中创建表
CREATE HUGE TABLE huge_employee (
employee_id INT,
employee_name VARCHAR(100),
salary DOUBLE) STORAGE(WITH DELTA, ON HTBS1);
a.WITH DELTA 选项表示创建辅助三角洲表,用于提高数据的更新和删除效率;如果不指定 ON HTBS1,则表会创建在默认的 HMAIN HUGE表空间中。
b.WITH DELTA, ON HTBS1指定在HTBS1这个HUGE表空间中创建
2.4.2.3查看 HUGE 表空间信息
SELECT * FROM V$HUGE_TABLESPACE;
2.4.2.4删除 HUGE 表空间
DROP HUGE TABLESPACE HTBS1;
文章
阅读量
获赞