视图

1:什么是视图
  视图也被称为虚表,即虚拟的表,是一组数据的逻辑表示,其本质是对应一条select语句,结果集被赋予一个名字,即视图的名
  字。视图本身并不包含任何数据,只包含映射到基表的一个查询语句,当基表数据发生变化时,视图数据也会随之变化。
2:创建视图的方法
  create [or replace] view view_name [alias]
  as subquery;
3:视图创建后可以像操作基表一样操作视图
  语法中的subquery是select查询语句,对应的表被称为基表;
4:视图的种类
  根据视图所对应的子查询分:
    1:select语句是基于单表建立的,且不包含任何函数运算,表达式或分组函数,叫做简单视图,此视图是基表的子查询。
    2:select语句是基于单表建立的,且包含函数,表达式,分组函数或group by 子句,叫做复杂视图。
    3:select语句是基于多表建立的,叫做连接视图。
5:视图的作用
   a:简化复杂查询
   b:限制数据访问,对基表中的其他列起到限制和保护作用;
6:授权创建视图
   创建是视图的DDL语句为,create view,用户必须有create view系统权限,才能创建视图。如果没有权限,创建视图会提
   示:权限不足。
     管理员可以通过DCL语句授予用户创建视图的权限,语句为:grant create view to tarena;
7:查询视图
   查询视图和查询表的操作一样,此时视图的列明和创建视图时的列名一致,不一定是原基表列名。
   select * from 视图名;
8:对视图进行insert操作
   视图不包含任何数据,只是基表数据的逻辑映射。所以当对视图进行dml操作时,实际上是对基表数据的dml操作,对视图进行
  dml操作的原则是:
     1:简单视图能够执行dml操作,下列情况除外:在基表中定义了非空列,但是简单视图对应的select语句并没有包含这个
    非空列,导致这个非空列对视图不可见,这时无法对视图进行insert操作。
     2:若视图包含了函数,表达式,分组语句,distinct关键字或rownum伪劣,不允许执行dml操作
     3:dml操作不能违反基表的约束条件。
9:创建具有check option约束的视图
   语法如下:
   create [or replace] view view_name [alias]
   as subquery
   with check option;
   其中with check option短语表示,通过视图所做的修改,必须在视图可见的范围内。
     1:假设insert,新增的记录在视图仍可查看;
     2:假设update,修改后的结果必须能通过视图查看到;
     3:假设delete,删除的记录仅限于当下视图能查到的记录;
10:创建具有read only约束的视图
   对简单视图进行dml操作是合法的,但是不安全,如果没有在视图上进行都没了操作的必要,在建立视图时声明为只读来避免
   这种情况,保证视图对应的基表数据不会被非法修改。
   加入read only约束的语法
   create [or replace] view view_name [alias]
   as subquery
   with read only;
   此时对视图进行dml操作将会报错。
11:创建复杂视图
   a:创建复杂视图必须为视图中的函数或者表达式定义别名;
   b:复杂视图不允许dml操作,不然会报错;
   c:删除视图drop view view_name,对视图的删除不会影响基表数据。
 
posted @ 2019-01-10 15:50  模拟素素  阅读(927)  评论(0编辑  收藏  举报