Oracle其他数据对象
1 视图
1.1 什么是视图
视图相当于一个虚拟表,通过对单个或多个表的查询进行创建。但是视图并不存储此时查询出的结果,而是相当于储存进行查询的语句,当基表的数据更新时,则视图也会相应的更新。
对视图进行增删改的操作,该该操作也会相应的修改其创建时基于的表(基表)的内容.但无法通过联接视图修改多个基表
1.2 对视图的操作
- 创建视图
- 一个基表
create view <view_name>
as
select [<字段1>,<字段2>,...,<字段n>] from <base_table_name> [where <expr>]
- 多个基表
create view <view_name>
as
select [<字段1>,<字段2>,...,<字段n>] from <expr>#参考多表查询
- 限制对视图只能读,不能写
在创建视图的语句后加上with read only
如:
create view view_emp
as
select e.ename,e.job,e.empno from scott.emp e
with read only;
- 对视图加约束
- 创建视图时使用的where条件作为约束,并为之创建一个
约束名
。 - 在最后一句加上
with check option constraint <constraint_name>
- 约束=约束的是修改和添加的操作。
例:无约束
create view view_no_constraint
as
select e.empno,e.ename,comm from scott.emp e where comm is not null;
例:有约束
create view view_with_constraint
as
select e.empno,e.ename,comm from scott.emp e where comm is not null
with check option constraint view_constraint;
- 删除视图
drop view <view_name>;
- 替换视图
create or replace view <view_name>
as
<select_expr>;
2 序列
2.1 什么是序列
序列顾名思义就是一个序号。可以用来自动产生序号,并且有一些参数可以设置,如:增长速度、起始值、最大值、最小值、是否循环、是否缓存
2.2 序列的用途
可以用在表中一些需要用到序号的地方
2.3 对序列的操作
- 创建序列
create sequence <sequence_name>
[increment by <步长>|
start with <起始值>|
maxvalue <最大值>|
minvalue <最小值>|
cycle|nocycle 是否循环|
cache|nocache 是否缓存]
;
- 删除序列
drop sequence <sequence_name>;
- 序列的使用
- 序列的当前值
<sequence_name>.currval
- 序列的下一个值
<sequence_name>.nextval
3 索引
3.1什么是索引
如果一个数据表中存有海量的数据记录,当对表执行指定条件的查询时。常规的查询方法会将所有的记录都读取出来,然后再把读取的每一条记录与查询条件进行对比,最后返回满足条件的记录。这样进行操作的时间开销和I/O开销都很大。对于这种情况,就可以考虑通过建立索引来减小系统开销。
如果要在表中查询指定的记录,在没有索引的情况下,必须遍历整个表,而有了索引之后,只需要在索引中找到符合查询条件的索引字段值,就可以通过保存在索引中的ROWID快速找到表中对应的记录。例如,如果将表看做一本书,索引的作用类似于书中的目录。在没有目录的情况下,要在书中查找指定的内容必须阅读全文,而有了目录之后,只需要通过目录就可以快速找到包含所需内容的页码(相当于ROWID)。
建立和规划索引时。必须选择合适的表和列,如果选择的表和列不合适,不仅无法提高查询速度,反而会极大地降低DML操作的速度,所以建立索引必须注意以下几点:
1.索引应该建立在WHERE子句频繁引用列表上,如果在大表上频繁使用某列或某几个列作为条件执行索引操作,那么应该考虑在这些列上建立索引。
2.如果经常需要基于某列或者某几个列排序操作,那么应该在这些列上建立索引可以加快数据排序速度。
3.限制表的索引个数。索引主要用于加快查询速度,但会降低DML操作的速度。索引越多,DML操作速度越慢,尤其会极大地影响INSERT和DELETE操作的速度。因此,规划索引时,必须仔细权衡查询和DML的需求。
摘自:跑不完的操场
链接:https://www.jianshu.com/p/ebf56728e087
3.2对索引的操作
- 创建索引
create [unique] index <index_name> on <table_name>(<col_name1>[,<col_name2>,...,<col_namen>);
- 删除索引
drop index <index_name>;
4 同义词
4.1什么是同义词
同义词相当于对表的映射即为表起一个别名
- 公有同义词(public synonym)
所有的用户都可以访问的到 - 私有同义词(synonym)
仅有创建私有同义词的当前同义词可以访问
4.2对同义词的操作
- 授予创建同义词的权限给用户
grant create synonym to <user_name>;
- 创建公有同义词
create public synonym <synonym_name> for <table_name>;
- 创建私有同义词
create synonym <synonym_name> for <table_name>;
- 删除同义词
drop synonym <synonym_name>;
参考资料:索引:https://www.jianshu.com/p/ebf56728e087
原文:http://blog.isdevil.com/cjerrybird/2019/03/oracle%e5%85%b6%e4%bb%96%e6%95%b0%e6%8d%ae%e5%af%b9%e8%b1%a1.html
上一篇: 雍正帝去世没多久,为何弘皙就能拉拢众多大臣试图谋反呢?
下一篇: 什么叫组合模式(设计模式)