zoukankan      html  css  js  c++  java
  • 视图

    1.定义

    •        视图(view),也称虚表, 在系统的数据字典中仅存放了视图的定义,不存放视图对应的数据。每次使用的时候,只是重新执行SQL.
    •        视图是从一个或多个实际表中获得的,这些表的数据存放在数据库中。那些用于产生视图的表叫做该视图的基表。一个视图也可以从另一个视图中产生。
    •        视图的定义存在数据库中,与此定义相关的数据并没有再存一份于数据库中。通过视图看到的数据存放在基表中。
    •        视图看上去非常象数据库的物理表,对它的操作同任何其它的表一样。当通过视图修改数据时,实际上是在改变基表中的数据(某些视图仅用于查询);相反地,基表数据的改变也会自动反映在由基表产生的视图中。
    •        还有一种视图:物化视图(MATERIALIZED VIEW ),也称实体化视图,快照 (8i 以前的说法) ,它是含有数据的,占用存储空间。

    2.视图优点

        1)安全性

           通过视图用户只能查询和修改他们所能见到的数据。数据库中的其它数据则既看不见也取不到。通过Oracle视图,用户可以被限制在数据的不同子集上

       2)逻辑数据独立性。

           视图可帮助用户屏蔽真实表结构变化带来的影响。视图可以使应用程序和数据库表在一定程度上独立。

        如果没有视图,应用一定是建立在表上的。有了视图之后,程序可以建立在视图之上,从而程序与数据库表被视图分割开来。视图可以在以下几个方面使程序与数据独立:

           1. 如果应用建立在数据库表上,当数据库表发生变化时,可以在表上建立视图,通过视图屏蔽表的变化,从而应用程序可以不动。

           2. 如果应用建立在数据库表上,当应用发生变化时,可以在表上建立视图,通过视图屏蔽应用的变化,从而使数据库表不动。

           3. 如果应用建立在视图上,当数据库表发生变化时,可以在表上修改视图,通过视图屏蔽表的变化,从而应用程序可以不动。

           4.  如果应用建立在视图上,当应用发生变化时,可以在表上修改视图,通过视图屏蔽应用的变化,从而数据库可以不动。

       3)简单性

       视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使用户不必为以后的操作每次都指定全部的条件

       4) 可以合并分离的数据,创建分区视图  

    3.视图限制性

    —      1)性能的降低

        SQL Server必须把对视图的查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,即使是对视图的一个简单查询,SQL Server也把它变成一个复杂的对基础表的连接查询,会产生一定的时间开销。

     

    —      2) 修改的限制:

        当用户要修改视图的某些行时,SQL Server必须把它转化为对基本表行的修改。对于简单的视图来说,这是很方便的,但是,对于比较复杂的视图来说,这可能是不可修改的。

     

    4.创建视图

    CREATE[OR REPLACE][FORCE][NOFORCE]VIEW view_name
    
    [(column_name)[,….n]]
    
    AS
    
    Select_statement
    
    [WITH CHECK OPTION[CONSTRAINT constraint_name]]
    
    [WITH READ ONLY]

      1)说明:

        view_name :  视图的名字

        column_name: 视图中的列名 (在下列情况下 , 必须指定视图列的名称 1)由算术表达式 , 系统内置函数或者常量得到的列2)共享同一个表名连接得到的列3) 希望视图中的列名与表中的列名不同的时候)

        REPLACE:  如果创建视图时, 已经存在此视图, 则重新创建此视图, 相当于覆盖

        FORCE:  强制创建视图, 无论的视图所依赖的基表否存在或是否有权限创建

        NOFORCE:  只有基表存在且具有创建视图权限时, 才可以创建视图

        WITH CHECK OPTION  指出在视图上所进行的修改都要符合select_statement 所指定的限制条件

        WITH READ ONLY  只允许查看视图

      2)视图的定义原则: 


           1. 在没有 WITH CHECK OPTION 和 READ ONLY的情况下,查询中不能使用ORDER BY子句; 
           2. 如果没有为 CHECK OPTION 约束命名,系统会自动为之命名,形式为 SYS_Cn;
     

    5.视图基本操作

      1. 查询视图: 可依赖于多个基表.    SELECT  * FROM view_name; /* 类似于查询表数据*/

      2. 插入数据   INSERT  INTO  view_name VALUES();

      3. 修改数据:  UPDATE  view_name SET …  (若一个视图依赖于多个基本表, 则一次修改该视图只能修改一个基本表的数据.)

      4. 删除数据:  Delete from view_name where …

      5. 删除视图:  DROP VIEW view_name;  (只有视图所有者和具备DROP VIEW 权限的用户可以删除视图。删除视图的定义不影响基表中的数据。视图被删除后,基于被删除视图的其他视图或应用将无效。)

         注意:对视图的增删改都是在基表的基础上

    6.视图操作限制

      1)在视图定义中没有设定READ ONLY 的前提下, 如果视图包含了下面的内容, 那么不能通过视图删除表中的数据:

        分组函数, 如SUM,AVG,MIN,MAX 等

        GROUP BY 子句

        包含了表达式

        ROWNUM 伪列

      2)插入数据时除了满足上面的条件外还需要保证那些没有包含在视图定义中的基表的列必须允许空值如果在视图定义中还包含了WITH CHECK OPTION 子句那么对视图的修改除了前面的那些原则外还必须满足指定的约束条件

      

      3)  在没有 WITH CHECK OPTION 和 READ ONLY的情况下,查询中不能使用 ORDER BY子句; 


         4)  
    如果没有为 CHECK OPTION 约束命名,系统会自动为之命名,形式为 SYS_Cn;

  • 相关阅读:
    mysql 查看并修改默认端口号
    安装MySQL-python 的问题
    mysql安装使用
    SAE部署Django1.6+MySQL
    Yii2框架学习 4-2小部件学习 (DetailView、ActiveForm、GridView 、ActionColumn 动作列的配置属性)
    Yii2框架学习 3-4 查询构建器QueryBuilder 的学习
    Yii2框架学习 4-2 HTML助手类、 Array Helper助手类
    Yii2框架学习 3-3 单条数据详情展示; 数据关联查询时 hasOne和hasMany
    Yii框架学习 3-2 数据库操作--ActiveRecord 操作和生命周期
    Yii2框架学习 3-1 yii连接数据库和使用数据库 数据库查询总结
  • 原文地址:https://www.cnblogs.com/wishyouhappy/p/3662321.html
Copyright © 2011-2022 走看看