视图、序列、索引、同义词

其他数据库对象

         除了数据库中的表对象以外还存在视图、序列、索引、与同义词

视图:从表中抽出的逻辑上相关的数据集合。

l 视图建立在已有表的基础上, 视图赖以建立的这些表称为基表。

l 向视图提供数据内容的语句为 SELECT 语句, 可以将视图理解为存储起来的 SELECT 语句.

l 视图向用户提供基表数据的另一种表现形式

语法:CREATE [ORREPLACE] [FORCE|NOFORCE]VIEW view

                            [(alias[, alias]...)]

                           ASsubquery

[WITHCHECK OPTION [CONSTRAINT constraint]]

[WITHREAD ONLY [CONSTRAINT constraint]];

•   FORCE:           子查询不一定存在(默认值为false)

•   NOFORCE:      子查询存在(默认值为false)

•   WITHREAD ONLY:  只能做查询操作(只读)

•   WITH CHECK OPTION: 不能通过视图操作select语句中定义以外的数据

 

单纯的创建视图是没有权限的,需要管理员指定后才能创建

         首先管理员登录:sqlplus / as sysdba

         给用户授予可以创建视图的权限:grant create view to scott

例:create view empincomeview

 2   as

 3  selecte.empno,e.ename,e.sal,e.sal*12 annalsal,e.sal*12+nvl(comm,0) income,d.dname

 4   from emp e,dept d

 5   where e.deptno=d.deptno;

视图的优点

1、  简化复杂查询(可以简单理解为封装了一个复杂的查询语句,只执行查询视图就相当于执行了复杂的查询语句了)

2、  限制数据访问(你只知道视图中的数据,但是你不知道是哪张表的数据,不让你直接访问表,数据提高了安全性)

3、  提供数据的相互独立

4、  同样的数据,可以有不同的显示方式

注:视图不能提高性能,并且不建议通过视图对表进行修改,如果想修改就替换它

查看视图 select * from empincomeview;

    EMPNO ENAME             SAL   ANNALSAL    INCOME DNAME                   

---------- ---------- ---------- -------------------- --------------          

     7369 SMITH             800       9600       9600 RESEARCH                

     7499 ALLEN            1600      19200     19500 SALES                   

     7521 WARD             1250      15000     15500 SALES                   

     7566 JONES            2975      35700     35700 RESEARCH                

     7654 MARTIN           1250      15000     16400 SALES                    

     7698 BLAKE            2850      34200     34200 SALES                   

     7782 CLARK            2450      29400     29400 ACCOUNTING              

     7788 SCOTT            3000      36000     36000 RESEARCH                 

     7839 KING             5000      60000     60000 ACCOUNTING              

     7844 TURNER           1500      18000     18000 SALES                   

     7876 ADAMS            1100      13200     13200 RESEARCH                

 

    EMPNO ENAME             SAL   ANNALSAL    INCOME DNAME                   

---------- ---------- ---------- -------------------- --------------          

     7900 JAMES             950      11400     11400 SALES                   

     7902 FORD             3000     36000      36000 RESEARCH                

     7934 MILLER           1300      15600     15600 ACCOUNTING              

修改视图

create or replace view empincomeview   没有视图就创建,有就替换

 2   as

 3  selecte.empno,e.ename,e.sal,e.sal*12 annalsal,e.sal*12+nvl(comm,0) income,d.dname

 4   from emp e,dept d

 5   where e.deptno=d.deptno

 6  with read only;

注:视图就是为了简化查询,所以我们不通过视图进行增删改,只做查询。

 

序列 sequence:可供多个用户用来产生唯一数值的数据库对象

作用:1、自动提供唯一的数值

2、  共享对象

3、  主要用于提供主键值

4、将序列值装入内存可以提高访问效率

语法:CREATE SEQUENCEsequence

       [INCREMENTBYn] 序列步长,默认为1

       [START WITH n]  从几开始,默认为1

       [{MAXVALUE n | NOMAXVALUE}]  最大,默认没有

       [{MINVALUE n | NOMINVALUE}]  最小,默认没有

       [{CYCLE | NOCYCLE}]  循环|不循环  默认不循环(一循环就重复了)

       [{CACHE n| NOCACHE}];  缓存|不缓存  默认值为20(长度)

创建序列

例: create sequence myseq;

NEXTVAL(下一个值)与CURRVAL(当前值)

1、  NEXTVAL 返回序列中下一个有效的值,任何用户都可以引用

2、  CURRVAL 中存放序列的当前值

3、NEXTVAL 应在 CURRVAL之前指定 ,二者应同时有效(在初始的时候指针在第一个值的前面,这是没有当前值,所以要先下一个再取当前值)

例: select myseq.nextval from dual; 值为1

select myseq.currval from dual;    值为1

例: insert into tableA values(myseq.nextval,'aa');

序列的裂缝(序列值不连续)

1、回滚

2、系统异常(由于序列在内存中,当停电后,序列不会从头开始)

3、多个表同时使用同一序列

 

索引(index):一种独立于表的模式对象, 可以存储在与表不同的磁盘或表空间中

索引被删除或损坏, 不会对表产生影响, 其影响的只是查询的速度

索引一旦建立, Oracle 管理系统会对其进行自动维护, 而且由 Oracle 管理系统决定何时使用索引.                                                                                                                                    用户不用在查询语句中指定使用哪个索引

在删除一个表时, 所有基于该表的索引会自动被删除(Oracle会自动维护索引表)

通过指针加速 Oracle 服务器的查询速度

通过快速定位数据的方法,减少磁盘 I/O

创建索引

自动创建: 在定义 PRIMARY KEY 或UNIQUE 约束后系统自动在相应的列上创建唯一性索引

手动创建: 用户可以在其它列上创建非唯一的索引,以加速查询

语法:CREATE INDEX index ON table(column[, column]...);

例:在员工表的部门列中建立索引

create index myindex onemp(deptno);

 

创建索引的时机

1、  表很大

2、  列经常在WHERE 子句或连接条件中出现

3、  表经常被访问而且数据量很大 ,访问的数据大概占数据总量的2%到4%

 

同义词:

好出:方便访问其它用户的对象并且缩短对象名字的长度。

语法:CREATE [PUBLIC] SYNONYM synonym  FOR  object;

例:为hr的EMPLOYEES表创建同义词

create synonym hremp for hr.EMPLOYEES;

在scott中查询这个表

如果想查询这个表是没有权限的,要先在管理员中设置

grant select onEMPLOYEES to scott;

再查就有权限了

select count(*)from hremp

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值