概述
视图是一种 虚表。在物理上并不存在,也就是不占用磁盘空间
视图 建立 在 已有表 的基础上
为什么使用视图
- 方便查询
- 控制数据访问
比如工资的信息不让其他人查询、修改,那么就就原表的访问权限仅限个别人查看,然后创建视图,该视图没有工资列,并将该视图的权限让所有人可访问
视图的操作
创建视图
create view 视图名 as
select 语句
创建或修改视图
如果没有该视图就创建,如果有该视图就修改
create or replace view 视图名 as
select 语句
删除视图
drop view 视图名
删除视图不影响原表的数据
对视图中数据的增删改查
查询视图的数据
与查询表中数据的方式相同
修改视图的数据
与修改表中数据的方式相同
删除视图的数据
与删除表中数据的方式相同
禁止对视图数据增删改操作
使用with read only 禁止对视图数据进行 增删改 操作
create or replace view 视图名 as
select 语句
with read only
之后如果再对视图中的数据进行 增删改 操作,会 报错
复杂视图
简单视图 和 复杂视图的区别
| 特性 | 简单视图 | 复杂视图 |
|---|---|---|
| 表的数量 | 一个 | 一个或多个 |
| 函数 | 没有 | 有 |
| 分组 | 没有 | 有 |
| 增删改操作(DML) | 可以 | 有时可以 |
例子
create or replace view emp_info as
select d.dname, e.ename, e.job, e.sal
from dept d
left join
(select *
from emp a,
(select deptno b_deptno, max(sal) as max_sal
from emp
group by deptno) b
where a.sal = b.max_sal) e
on d.deptno = e.deptno
复杂视图 增删改 数据的限制
当视图包含以下元素之一时,不能执行insert语句:
- 多行函数
- group by
- distinct
- rownum
- 列的定义为表达式
- 表中 不允许为空 的 列 在视图定义中 未包括
当视图包含以下元素之一时,不能执行delete语句:
- 多行函数
- group by
- distinct
- rownum
当视图包含以下元素之一时,不能执行update语句:
- 多行函数
- group by
- distinct
- rownum
- 列的定义为表达式