欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Oracle其他数据对象

程序员文章站 2022-06-02 19:08:43
...

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

转载请注明:大魔王ISDevil's Blog » Oracle其他数据对象

喜欢 (0)