视图
视图是基于一张或多张表或另外一个视图的逻辑表。视图不同于表,视图本身不包含任何数据。表是实际独立存在的实体,是用于存储数据的基本结构。而视图只是一种定义,对应一个查询语句。视图的数据都是来源某些表,这些表被称为基表。通过视图来查看表,就像从不同角度来观察一个或多个表
视图的一些有点:
-
可以提高数据的访问安全性,通过视图往往只可以访问数据库中表的特定部分,限制了用户访问表的全部行和列。
-
简化了对数据的查询,隐藏了查询的复杂性。视图的数据来自一个复杂的查询。用户对视图的检索却很简单。
-
视图是相同数据的不同表示,通过为不同的用户创建一个表的不同视图,使用户可分别访问同一个表的不同部分。
视图可以在表的能够使用的任何地方使用,但在对视图的操作上同表相比有些限制,特别是插入和修改操作。对视图的操作将传递到基表,所以在表上定义的约束条件和触发器在视图上将同样起作用。
-
视图的创建
创建视图需要create view系统权限,视图的创建语法如下:
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW 视图名[(列别名1[,列别名2..])]
as 子查询
[WITH CHECK OPTION [CONSTRAINT 约束名]]
[WITH READ ONLY]OR REPLACE 表示替代已经存在的视图
force 表示不管基表是否存在,创建视图
noforce 表示只有基表存在时,才创建视图,是默认值。
with check option 更新或者插入数据时满足where条件。
with read only 只读 不能插入数据
--eg 给列取别名,后面的子查询不能用*对应。
create or replace force view v_emp (a,b,c)
as
select empname,deptno ,sal from emp where deptno='20'
with check option
with read only;来自基表的限制
除了以上的限制,基表本身的限制和约束也要考虑。如果生成子查询的语句是一个分组查询,或查询中出现计算列,这时显然不能对表进行插入。另外,主键和not null列如果没有出现在视图的子查询中,也不能对视图进行插入(插入的数据存入基表时,这些值默认空违反基表约束)。在视图中插入的数据必须满足基表的约束条件。