1.定义

视图(view),也称虚表, 在系统的数据字典中仅存放了视图的定义,不存放视图对应的数据。每次使用的时候,只是重新执行SQL.

视图是从一个或多个实际表中获得的,这些表的数据存放在数据库中。那些用于产生视图的表叫做该视图的基表。一个视图也可以从另一个视图中产生。

视图的定义存在数据库中,与此定义相关的数据并没有再存一份于数据库中。通过视图看到的数据存放在基表中。
视图看上去非常象数据库的物理表,对它的操作同任何其它的表一样。当通过视图修改数据时,实际上是在改变基表中的数据(某些视图仅用于查询);相反地,基表数据的改变也会自动反映在由基表产生的视图中。

还有一种视图:物化视图(MATERIALIZED VIEW ),也称实体化视图,快照 (8i 以前的说法) ,它是含有数据的,占用存储空间。

2.视图优点

  1)安全性

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

  2)逻辑数据独立性。

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

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

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

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

  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;

    来源# 视图

最后修改:2022 年 04 月 04 日
如果觉得我的文章对你有用,请随意赞赏