模式定义: 模式是一个特定的对象集合, 在概念上可将其看作是包含表、 视图、 索引等若干对象的对象集。 模式对象: 表、 视图、 约束、 索引、 序列、 触发器、 存储过程/函数、包、 同义词、 类、 域。 模式与用户之间的关系:当系统建立一个用户时, 会自动生成一个对应同名的模式用户还可以建立其他模式(一个用户可以对多个模式)
1 表的管理
1.1 达梦支持的表:
默认的表是索引组织表, 支持堆表, 临时表, 分区表, 外部表等
1.1.1 规划表:
1、 命名: 字母开头, a-z,0-9,$#_ 2、 数据类型: int char varchar date clob blob number 等 3、 存储位置: 自已规划的表空间, 如果没有指定表空间, 则会存到 main 表空间中。 4、 约束(5 大约束) 非空约束, 唯一约束, 主键, 外键, 检查约束 5、 注释: comment。 遵循 3 范式。
案例: 规划一张学员信息表 表名: STU 学号: ID char(10) 姓名: sname varchar(20) not null 性别: sex char(1) 年龄: age int 电话: tel varchar(15) not null 家庭住址: address varchar(50) 表空间: STU 约束: 主键列----学号, 非空----姓名和电话
备注: studentinfo
create table "TEST"."STU" ( "ID" CHAR(10) not null , "SNAME" VARCHAR(20) not null , "SEX" CHAR(1), "AGE" INT, "TEL" VARCHAR(15) not null , "ADDRESS" VARCHAR(50), primary key("ID") ) storage(initial 1, next 1, minextents 1, fillfactor 0, on "STU") ; comment on table "TEST"."STU" is 'STUDENTINFO';
导入数据到表中 1、 insert into 表名(列名) values();
Insert into "TEST"."STU"(ID,SNAME,SEX,AGE,TEL,ADDRESS) values(1,'zhangsan','男',18,'130000000000','北京');
2、通过脚本把数据导入到表中。
1.1.2 维护表:
create table test.t5(id int); insert into test.t5 values(1); insert into test.t5 values(2); insert into test.t5 values(3) insert into test.t5 values(4); insert into test.t5 values(5); insert into test.t5 values(6); insert into test.t5 values(7); insert into test.t5 values(8);
增加列:
ALTER TABLE TEST.T5 ADD COLUMN(C1 NUMBER(3,1));
删除列:
Alter table test.t5 drop column C1;
创建约束 1、 非空约束
Create table test.t6(id int); Alter table test.t6 modify id int not null;
2、 唯一约束
Create table test.t7(id int ,name varchar(20) unique); insert into test.t7 values(1,'sssss'); insert into test.t7 values(2,null); insert into test.t7 values(3,''); insert into test.t7 values(4,null); insert into test.t7 values(5,''); insert into test.t7 values(6,null); commit;
唯一约束, 遇到 null 会忽略, 可以录入多个 null 值, 但“” , 只能录入一个。 3、 主键约束
create table test.t8(id int PRIMARY key, name varchar(20)); create table test.t9(id int ,name varchar(20)); alter table test.t9 add constraint t9_pri PRIMARY key(id);
4、 检查约束
create table test.t10(id int CHECK(id>=5)); insert into test.t10 values(4); insert into test.t10 values(5);
5、 外键约束 一个表的外键, 一定是另一张表的主键, 用来保证数据的一致性。
create table test.t11(sid int PRIMARY key ,pid int); create table test.t12(id int primary key,sid int FOREIGN key REFERENCES test.t11(sid)); alter table "TEST"."T8" add constraint "T8_FK" foreign key("ID") references "TEST"."STU"("ID");
6、 对列加备注
Comment on column test.t11.sid is ‘编号’ ;
查看约束和注释
select constraint_name, constraint_type,table_name from dba_constraints where TABLE_NAME='T12';
启用和禁用约束
Alter table test.t12 disable constraint cons134218853 Alter table test.t12 enable constraint cons134218853
删除约束:
alter table DMHR.TEST drop constraint TEST_UNI;
删除表
Drop table test.t1;
2 视图
从用户角度来看, 一个视图是从一个特定的角度来查看数据库中的数据。从数据库系统内部来看, 一个视图是由 SELECT 语句组成的查询定义的虚拟表。
视图的分类: 简单视图、 复杂视图、 物化视图。 1、 简单视图: 对单表做查询
Create or replace view () as select () from () where (); create view test.v1 as select employee_id,employee_name,department_id,job_id from dmhr.employee;
2、 复杂视图, 关联两张表以上的或是包含集函数的 sql.
create view test.v5 as select d.department_name, a.av1 from (select department_id, avg(salary) as av1 from dmhr.employee e group by department_id having avg(salary)>10000) a join dmhr.department d on a.department_id=d.department_id;
3、 物化视图 简单视图和复杂视图是不占存储空间的, 是虚拟表, 物化视图是占存储空间的。 简单视图可以做增加, 删除, 修改。
删除视图
Drop view test.v5;
3 索引
索引: 一种数据库对象, 通过指针加速查询速度, 通过快速定位数据的方法, 减少磁盘 I/O, 索引与表相互独立, 服务器自动使用和维护索引。 索引占空间。
达梦支持的索引: 二级索引, 位图索引, 唯一索引, 复合索引, 函数索引, 分区索引等。
3.1 创建索引的规则:
什么情况下适合建索引 1、 经常查询的列 2、 连接条件列 3、 谓词经常出现的列(where) 4、 查询是返回值的一小部分数据。 不适合建索引的情况 1、 列上有大量 null 2、 列上的数据种类有限的(性别) 。 创建索引: 1、 规划索引表空间, 表的数据是无序的, 索引的数据是有序的。
创建索引表空间:
create tablespace INDEX1 DATAFILE '/home/dmdba/dmdata/DAMENG/index1_01.dbf' size 32;
创建索引:
create table test.emp as select * from dmhr.employee;
维护索引: 重建:
Alter index test.ind_emp rebuild; Alter index test.ind_emp rebulid online;
创建索引, 删除索引, 重建索引, 收集统计信息这类操作, 不要在业务高峰去做, 在业务低谷的时候去操作。
删除索引:
Drop index test.ind_emp;
更多资讯请上达梦技术社区了解: https://eco.dameng.com