对象 | 描述 |
---|---|
表 | 基本的数据存储集合,由行和列组成 |
视图 | 从表中抽出的逻辑上相关的数据集合 |
序列 | 提供有规律的数值 |
索引 | 提高查询的效率 |
同义词 | 给对象起别名 |
create [or replace] [force|noforce] view viewName
[(alias[, alisa]...)]
[with check option [constraint constraint]]
[with read only [constraint constraint]];
create view empView20 as select * from emp t where t.deptno=20;
select * from empView20;
create or replace view 视图名称 as 子查询
如果视图已经存在我们可以使用语法2来创建视图,这样已有的视图会被覆盖。
create or replace view wmpView20 as select * from emp t where t.deptno=10;
select * from empView20;
特性 | 简单视图 | 复杂视图 |
---|---|---|
表的数量 | 一个 | 一个或多个 |
函数 | 没有 | 有 |
分组 | 没有 | 有 |
DML操作 | 可以 | 有时可以 |
不 建 议 通 过 视 图 对 表 中 数 据 进 行 修 改 , 因 为 会 受 到 很 多 的 限 制 。 \color{red}{不建议通过视图对表中数据进行修改,因为会受到很多的限制。} 不建议通过视图对表中数据进行修改,因为会受到很多的限制。
示例:查询各个部门的最低工资,最高工资,平均工资
create view dept_sum_vu
(name, minsal, maxsal, avgsal)
as select d.department_name, MIN(e.salary),
MAX(e.salary), AVG(e.salary)
from employees e, departments d
where e.department_id = d.department_id
group by d.department_name;
可以在简单视图中执行DML操作
当视图定义中包含以下元素之一时不饿能使用delete:
当视图定义中包含以下元素之一时不能使用update:
当视图定义中包含以下元素之一时不能使用insert:
删除视图只是删除视图的定义,并不会删除基本表的数据。
drop view vie;
drop view empView20;
在很多数据库中都存在一个自动增长的列,如果现在要想在oracle中完成自动增长的功能,则只能依靠序列完成,所有的自动增长操作,需要用户手工完成处理。并且Oracle将序列值装入内存可以提高访问效率。
序列:可供多个用户用来产生唯一数值的数据库对象:
create sequence 序列名
[increment by n]
[start with n]
[{MAXVALUE n| NOMAXVALUE}]
[{MINVALUE n| NOMINVALUE}]
[{CYCLE|NOCYCLE}]
[{CACHE n| NOCACHE}];
示例:
create sequence dept_deptid_seq
increment by 10
start with 120
maxvalue 9999
nocache
nocycle;
Sequence created.
查询数据字典视图USER_SEQUENCES获取序列定义信息:
select sequence_name, min_value, max_value, increment_by, last_number
from user_sequences;
序列创建完成之后,所有的自动增长应该由用户自己处理,所以在序列中提供了以下的两种操作:
在插入数据时需要自增的主键中可以这样使用
序列可能产生裂缝的原因:
修改序列的增量,最大值,最小值,循环选项或是否装入内存
alter sequence dept_deptid_seq
increment by 20
maxvalue 999999
nochche
noccle;
drop sequence dept_deptid_seq;
Sequence dropped.
索引是用于加速数据存取的数据对象。合理的使用索引可以大大降低i/o的次数,从而提高数据访问性能。
1. 单列索引:
单列索引是基于单个列所建立的索引,比如:
create index 索引名 on 表明(列名);
2. 复合索引:
复合索引是基于两个列或多个列的索引。在同一张表上可以有多个索引,但是要求列的组合必须不同,例如:
create index emp_idxl on emp(ename, job);
create index emp_idx1 on emp(job, ename);
示例:给person表的name属性建立索引
create index pname_index on person(name);
示例:给person表创建一个name和gender的索引
create index pname_gender_index on person(name, gender);
可以使用数据字典视图USER_INDEXES和USER_IND_COLUMNS查看索引的信息
drop index indexName;
drop index upper_last_name_idx;
Index dropped.
create [public] SYNONYM synonym
for object;
示例:为视图DEPT_SUM_VU创建同义词
create synonym d_sum
for dept_sum_vu;
Synonym Created.
drop synonym d_sum;
Synonym dropped.