设为首页 加入收藏

TOP

Oracle08、视图+同义词+序列+索引(一)
2017-10-16 18:20:01 】 浏览:1798
Tags:Oracle08 视图 同义词 序列 索引

一、视图

什么是视图【View】
(1)视图是一种虚表
(2)视图建立在已有表的基础上, 视图赖以建立的这些表称为基表
(3)向视图提供数据内容的语句为 SELECT 语句,可以将视图理解为存储起来的 SELECT 语句
(4)视图向用户提供基表数据的另一种表现形式
(5)视图没有存储真正的数据,真正的数据还是存储在基表中
(6)程序员虽然操作的是视图,但最终视图还会转成操作基表
(7)一个基表可以有0个或多个视图

什么情况下会用到视图
(1)如果你不想让用户看到所有数据(字段,记录),只想让用户看到某些的数据时,此时可以使用视图
(2)当你需要减化SQL查询语句的编写时,可以使用视图,但不提高查询效率

视图应用领域
(1)银行,电信,金属,证券军事等不便让用户知道所有数据的项目中

视图的作用
(1)限制数据访问
(2)简化复杂查询
(3)提供数据的相互独立
(4)同样的数据,可以有不同的显示方式

在了解了视图相关的概念之后,下面笔者就来介绍一下视图的创建以及创建之前需要做的准备工作。

首先,在Oracle中,默认普通用户是没有创建视图的权限的,所以如果你要创建视图的话,就要让sysdba给普通用户分配创建视图的权限:

/*以sysdba身份,授权scott用户create view权限*/
grant create view to scott;

/*以sysdba身份,撤销scott用户create view权限*/
revoke create view from scott;

当给普通用户赋予了创建视图的权限之后,普通用户就拥有了创建视图的权限了:

/*基于emp表所有列,创建视图emp_view_1,create view 视图名 as select对一张或多张基表的查询*/
create view emp_view_1
as
select * from emp;

/*基于emp表指定列,创建视图emp_view_2,该视图包含编号/姓名/工资/年薪/年收入(查询中使用列别名)*/
create view emp_view_2
as
select empno "编号",ename "姓名",sal "工资",sal*12 "年薪",sal*12+NVL(comm,0) "年收入"
from emp;

/*基于emp表指定列,创建视图emp_view_3(a,b,c,d,e),包含编号/姓名/工资/年薪/年收入(视图中使用列名)*/
create view emp_view_3(a,b,c,d,e)
as
select empno "编号",ename "姓名",sal "工资",sal*12 "年薪",sal*12+NVL(comm,0) "年收入"
from emp;

/*查询emp_view_3创建视图的结构*/
desc emp_view_3;

/*修改emp_view_3(id,name,salary,annual,income)视图,create or replace view 视图名 as 子查询*/
create or replace view emp_view_3(id,name,salary,annual,income)
as
select empno "编号",ename "姓名",sal "工资",sal*12 "年薪",sal*12+NVL(comm,0) "年收入"
from emp;

/*查询emp表,求出各部门的最低工资,最高工资,平均工资*/
select min(sal), max(sal), round(avg(sal), 0), deptno
  from emp
 group by deptno;

/*创建视图emp_view_4,视图中包含各部门的最低工资,最高工资,平均工资*/
create or replace view emp_view_4
as
select deptno "部门号",min(sal) "最低工资",max(sal) "最高工资",round(avg(sal),0) "平均工资"
from emp
group by deptno;

/*创建视图emp_view_5,视图中包含员工编号,姓名,工资,部门名,工资等级*/
create or replace view emp_view_5
as
select e.empno "编号",e.ename "姓名",e.sal "工资",d.dname "部门名",s.grade "工资等级"
from emp e,dept d,salgrade s
where (e.deptno=d.deptno) and (e.sal between s.losal and s.hisal);

/*删除视图emp_view_1中的7788号员工的记录,使用delete操作,会影响基表吗*/
delete from emp_view_1 where empno=7788;--写法正确,会影响基表

/*修改emp_view_1为只读视图【with read only】,再执行上述delete操作,还行吗?*/
create or replace view emp_view_1
as
select * from emp
with read only;--不能进行delete操作了

对于视图,在操作中还有一些需要注意的地方,下面以问答的形式进行描述:

删除视图中的【某条】记录会影响基表吗?
会影响基表

将【整个】视图删除,会影响表吗?
不会影响基表

删除视图,会进入回收站吗?
不会进入回收站

删除基表会影响视图吗?
会影响视图

闪回基表后,视图有影响吗?
视图又可以正常工作了

二、同义词

什么是同义词【Synonym】
(1)对一些比较长名字的对象(表,视图,索引,序列......)做减化,用别名替代

同义词的作用
(1)缩短对象名字的长度
(2)方便访问其它用户的对象

赋予创建同义词的权限以及创建同义词

/*以sys身份授予scott普通用户create synonym权限*/
grant create synonym to scott;

/*以sys身份从scott普通用户撤销create synonym权限*/
revoke create synonym from scott;

/*创建与salgrade表对应的同义词,create synonym 同义词 for 表名/视图/其它对象*/
create synonym e for salgrade;
create synonym ev5 for emp_view_5;

/*使用同义词操作salgrade表*/
select * from s;

/*删除同义词*/
drop synonym ev5;

注意:删除同义词之后不会影响到基表,但

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Oracle06、增删改数据 下一篇Oracle07、事务+Oracle访问其他用..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目