学习使用了达梦数据库8(DM8),本文总结对于达梦数据库模式对象管理的相关内容及操作方法。
相关概念
- 【模式】:是所有对象的集合,包括了表、约束、索引、视图等。在达梦数据库中,一个模式仅属于一个用户(当用户创建时,达梦数据库会自动创建一个与用户同名的模式),而一个用户可以拥有和创建多个模式,可以理解为模式是用户数据资产的一个子集。
- 【表】:是人为地总结出来的、用以描述一类事物的一组描述信息。由行(记录)和列(字段)构成,行中的记录就是数据,列中对应字段,可以理解为表是行和列的集合。
- 【约束】:是给表的列(字段)添加的限制条件,使得不符合要求的数据不能被添加、修改或删除。可以包含主键约束(唯一且非空)、非空约束、唯一约束、外键约束。
- 【索引】:是数据库中提高查询效率的技术,类似于字典的目录。使用索引后,磁盘块会以树桩结构保存,查询数据时能够大大降低磁盘块的访问量从而提高查询效率。
- 【视图】:可以理解成是一张虚拟的表,视图本质就是取代了一段SQL查询语句。使用视图后,一方面复杂的查询语句得以保存,另一方面可以对低权限用户仅开放视图,在视图中进一步作查询结果的限制(例如仅想让用户A查询到表T中的a、b字段,但是不让A查询到表T中的c字段)。
外键约束因何需要?:首先可以通过外键约束字段建立多表关系。但是它最重要的意义实际上是保证数据的完整性。被外键依赖的行(记录)不能先删除,被外键依赖的表也不能被先删除。
注意事项:
注1:下列方括号“[”,“]”及方括号内的字段为实际执行时需要替换的内容,并非SQL语句本身。
注2:所有命令均可在达梦管理工具的查询中进行编辑提交,也可以在达梦DISQL中进行编辑提交。图形操作均在达梦管理工具的左侧树形结构中进行操作。
打开达梦管理工具的方式:
Shell > cd /[DMPATH]/tool
Shell > ./manager
打开DISQL工具的方式:
Shell > cd /[DMPATH]/tool
Shell > ./disql [userName]/[password]@[ip]:[port]
[DMPATH]:数据库安装路径; [userName]:数据库用户名; [password]:数据库密码; [ip]:数据库IP地址;[port]:数据库端口号。
模式管理
命令
创建模式:
SQL > create schema [schemaName] authorization [userName];
-- 为[userName]创建模式[schemaName]
当前用户切换模式:
SQL > set schema [schemaName2];
-- 设置为[schemaName2]模式后,可以在SQL语句中不指定模式名的前提下,进行该模式下表的操作
删除模式:
SQL > drop schema [schemaName];
-- 注意:无法删除用户默认模式
图形
表管理
命令
创建表:
SQL > create table [tableName]([columnName] [columnType]);
-- 创建一张表[tableName],包含[columnName]字段,字段类型为[columnType]
添加字段:
SQL > alter table [tableName] add [columnName] [columnType];
-- 为[tableName]表添加[columnName]字段,字段类型为[columnType]
修改字段:
SQL > alter table [tableName] modify [columnName] [columnType];
-- 为[tableName]表修改[columnName]字段,修改字段类型为[columnType]
删除字段:
SQL > alter table [tableName] drop column [columnName];
-- 删除[tableName]表中的[columnName]字段
添加注释:
SQL > comment on table [tableName] is '[tableInfo]';
-- 为[tableName]表添加[tableInfo]的注释
SQL > comment on column [tableName].[columnName] is '[columnInfo]';
-- 为[tableName]表的[columnName]字段添加[columnInfo]的注释
SQL文件导入:
SQL > start /[path]/[fileName].sql;
-- 导入[path]路径下名称为[fileName]的SQL文件
图形
约束管理
命令
增加约束:
SQL > alter table [tableName] add constraint [constraintName]
unique([columnName]);
-- 为[tableName]中的[columnName]增加唯一约束,约束名称为[constraintName]
SQL > alter table [tableName] add constraint [constraintName]
primary key([columnName]);
-- 为[tableName]中的[columnName]增加主键约束,约束名称为[constraintName]
SQL > alter table [tableName] add constraint [constraintName]
check(instr([columnName],'@dameng.com')>1);
-- 为[tableName]中的[columnName]增加必须包含'@dameng.com'的约束,约束名称为[constraintName]
SQL > alter table [tableName] add column [columnName] [columnType];
-- 首先在本表[tableName] 中添加一个类型为[columnType]的[columnName]字段
SQL > alter table [tableName] add constraint [constraintName]
foreign key([columnName])
references [tableName2]([columnName2]);
-- 本表[tableName]中的[columnName]字段外键约束到[tableName2]表的[columnName2]字段
建表时直接添加约束示例:
SQL > create table test_table (
id int constraint pk_test_id primary key,
name varchar(100) not null, phone varchar(20) unique,
age int constraint ck_test_age check (age>6),
pid int foreign key references test_table2(id)
);
-- 增加了testtable表id主键约束、name非空约束、phone唯一约束、age大于6约束、pid外键约束到test_table2的id字段
禁用/启用约束:
SQL > alter table [tableName] disable constraint [constraintName] cascade;
-- 禁用名称为[constraintName]的约束。
SQL > alter table [tableName] enable constraint [constraintName] cascade;
-- 启用名称为[constraintName]的约束。
--注:cascade为级联删除
删除约束:
SQL > alter table [tableName] drop constraint [constraintName] cascade;
-- 删除名称为[constraintName]的约束。
--注:cascade为级联删除
图形
索引管理
命令
创建索引:
SQL > create index [indexName] on [tableName]([columnName]);
-- 将表[tableName]中的[columnName]字段设置为索引,索引名称为[indexName]
删除索引:
SQL > drop index [indexName];
-- 删除名为[indexName]的索引
图形
视图管理
命令
创建视图:
SQL > create view [viewName] as [select sql];
-- 以[select sql]创建名为[viewName]的视图
创建视图示例:
SQL > create view emp_salary as
select d.dept_name, e.dept_id, avg(e.salary) avg_salary
from t_emp e, t_dept d
where e.dept_id = d.dept_id
group by e.dept_id, d.dept_name
having avg(e.salary) > 8000;
-- 统计dept平均salary大于8000的dept_name,dept_id及平均salary
图形
备注
模式和用户的关系:一个模式仅归属于一个用户,而一个用户可以拥有多个模式。 模式下可以拥有表、索引、存储过程等对象。
DM 表包含:索引组织表(DM 默认索引组织表)、堆表(ORACLE 默认是堆表)、外部表、 分区表。
索引组织表:默认表会有一个聚簇键(聚簇索引),表按照聚簇键排序,如果创建表时没有 指定聚簇键,默认使用逻辑 ROWID
为聚簇索引键。索引组织表是有序的。ROWID 是逻辑rowid,占用存储空间。
堆表:堆表的存储时无序的,插入相对比所以组织表快。堆表的ROWID是物理id,不占用存储空间。
外键约束必须引用的是另一张表的主键,否则报错。
DM每张表默认有一个聚簇索引、创建主键、唯一键约束会默认创建 索引、创建外键时也可以指定是否创建索引。