1.视图
视图(view)被称之为虚表,即在数据库中,属于一种不存在实体的表,也可说其给实体表加上了一层窗帘,只公开部分数据,一些较为私密的数据则不允许查看访问,这样的实体表,在视图中也称为物理表(基表)。所以视图是对基表的一种数据保护,值得注意的是,通过视图进行的增删改查,将会同样作用于基表中,因为我们作用的就是基表。
语法:
create or replace view 视图名 as
query
例子:
create or replace view v$empinfo
as
select e.empno,e.ename,e.job,e.mgr,e.hiredate,e.deptno
from emp e;
1.1使用视图
使用视图的方法与使用表时的操作一样。
-- 使用视图
select * from v$empinfo;
-- 删除视图
drop view v$empinfo;
修改视图中的数据:
-- 向视图添加数据
insert into v$empinfo(empno,ename,job,mgr,hiredate,deptno)
values(1090,'cai90','singer',7839,sysdate,30);
select * from emp e;
之前提到,通过视图去操作数据,将会对基表产生影响,所以,在进行增加数据时,未显示给视图的字段将会自动加null,如果该未显示的字段设置了无法添加null值时,那么我们将无法通过视图去增加数据,系统将会提示添加失败。
例子:
insert into v$empinfo(ename,job,mgr,hiredate,deptno)
values('cai100','singer',7839,sysdate,30);
1.1.1只读视图
例子:
create or replace view v$empinfo as
select e.empno,e.ename,e.job,e.mgr,e.hiredate,e.deptno from emp e
with read only;
insert into v$empinfo(empno,ename,job,mgr,hiredate,deptno)
values(1110,'cai100','singer',7839,sysdate,30);
只读视图,顾名思义,我们只能进行查询操作,而无法进行增删改操作,这就意味着数据将得到完美的保护,操作者将无法对其作出任何破坏性操作。
1.2视图的应用
-- 平均薪水的等级最低的部门,它的部门名称是什么
select vt3.deptno, d.dname
from (select *
from v$AvgSalGrade VT2
where VT2.grade = (select min(vt1.grade) from v$AvgSalGrade VT1)) VT3
join dept d
on vt3.deptno = d.deptno
-- 通过视图优化
create or replace view v$AvgSalGrade as
select vt0.deptno,vt0.avgsal,sg.grade
from (select e.deptno,avg(e.sal) "AVGSAL"
from emp e
group by e.deptno) VT0 join salgrade sg on vt0.avgsal between sg.losal and sg.hisal
with read only
2.权限管理
在下载Oracle时,我们都知道,Scott需要进行解锁,这就是给予了开发者使用scott账户的权限。
alter user scott account unlock;
此时scott如果对数据库进行DDL操作是没有权限的。把创建视图、创建表的权限分配给soctt
在赋予权限时,我们需要一个具有更高权限的账户来进行授权,那就是sysdba。