东软实习之数据库(12)——视图

  ##视图

    视图是逻辑上来自一个或多个表的数据集合

    

    为什么使用视图

    1. 限制对数据库表的访问,因为视图可以有选择性的显示数据库表的一部分;
    2. 容易实现复杂的查询;
    3. 对于相同的数据可以产生不同的视图;

    视图分类

      视图分为简单视图和复杂视图,最基本差别在DML操作上

      



  #创建视图

     在CREATE VIEW语句中嵌入一子查询;

     

    子查询可以采用复杂的SELECT语法形式;

    子查询中不能使用ORDER BY子句,它可在从视图中查询数据时使用。

    • OR REPLACE:如果所创建的视图已经存在,Oracle会自动重建该视图;
    • FORCE:不管基表是否存在,Oracle都会创建该视图;
    • NOFORCE:只有基表都存在,Oracle才会创建该视图; view:视图的名称;
    • alias:为视图所产生的列定义别名,别名的数量必须和视图所对应查询语句的列数量相等; subquery:一条完整的SELECT语句,在该语句中同样可以定义别名;
    • WITH CHECK OPTION:所插入或修改的数据行必须满足视图所定义的约束(插入或更新后的结果必须仍然可以在视图中呈现 ) ;
    • constraint:CHECK OPTION中的约束名;
    • WITH READ ONLY:确保在该视图上不能进行任何DML操作;

    创建视图 EMPVU10,该视图仅包含10部门雇员的细节信息。

     

    用SQL*Plus DESCRIBE显示视图的结构。

     

    创建视图时在内部查询中使用列的别名

     

    创建一个基于两个表并且含有组函数的复杂视图

     


  #从视图检索数据//查询视图

     

      


  #修改视图

     用 CREATE OR REPLACE VIEW子句修改视图empvu10,为每个列添加别名。

     

    CREATE VIEW子句中别名的顺序必须和内部查询中的列的顺序一一对应。


   #视图上执行DML操作的规则

     在简单视图上可以执行 DML 操作;

    您可以通过视图删除基表中数据,只要视图中不出现以下情况:

    •  Group 函数;
    • GROUP BY 子句;
    • DISTINCT 关键字;

    您可以通过视图修改基表中数据,只要视图中不出现以下情况:

    • GROUP函数、
    • GROUP BY子句,
    • DISTINCT关键字;
    • 使用表达式定义的列;
    • ROWNUM 伪列;

     您可以通过视图向基表插入数据,只要视图中不出现以下情况:

    • GROUP函数、GROUP BY子句,DISTINCT关键字;
    • 使用表达式定义的列;
    • ROWNUM 伪列;
    • 基表中未在视图中选择的其它列定义为非空并且没有默认值;

       #WITH CHECK OPTION 子句

         如果要确保在视图上执行的DML操作仅限于一定的范围,便可使用WITH CHECK OPTION子句;

         

        在视图中任何修改部门编号的操作都会失败,因为这违反了 WITH CHECK OPTION约束。

       #拒绝 DML 操作

         在视图定义时使用WITH READ ONLY选项,可以确保不能对视图执行DML操作;

         

        任何试图执行DML的操作都会导致一个错误ORA-01752。

       #删除视图

         删除视图并不会删除数据,因为视图是基于数据库中的基表的虚表。

         

      #相关数据字典

         USER_VIEWS:字典中包含了视图的定义。

         USER_UPDATABLE_COLUMNS:字典包含了哪些列可以更新、插入、删除。

        USER_OBJECTS:字典中包含了用户的对象。

 



   ##本章重点总结

    •  理解视图的作用、分类;
    • 掌握如何创建简单视图;
    • 掌握如何创建复杂视图;
    • 理解带约束视图的含义;
    • 理解只读视图的含义;
    • 掌握如何从视图中检索数据;
    • 掌握修改、删除视图;
    • 了解通过视图执行DML操作的规则;

 

posted @ 2018-07-20 14:28  HIT王新宇  阅读(231)  评论(0编辑  收藏  举报