数据库视图

来源:互联网 发布:企业java编程思想 pdf 编辑:程序博客网 时间:2024/06/18 08:20

对我自己而言,数据库视图使用的其实并不多,我自己的经历当中,很多时候,基本上可以这样认为,视图好像没有什么用处,希望通过这篇记录出,视图的应用场景。

什么叫做视图

视图是从一个或几个基本表(或视图)导出的表。它与基本表不同,是一个虚表。数据库只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。所以基本表中的数据发生变化,从视图中查询出的数据也就随之改变了。从这个意义上讲,视图就像一个窗口,透过它可以看到数据库中自己感兴趣的数据及其变化。

视图(View)作为一种数据库对象,为用户提供了一个可以检索数据表中的数据方式。用户通过视图来浏览数据表中感兴趣的部分或全部数据,而数据的物理存储位置仍然在表中。
视图是一个虚拟表,并不代表任何物理数据,只是用来查看数据的窗口而已。视图并不是以一组数据的形式存储在数据库中,数据库中只存储视图的定义,而不存储视图对应的数据,这些数据仍存储在导出视图的基本表中。当基本表中的数据发生变化时,从视图中查询出来的数据也随之改变。

视图优缺点

视图的优点

  1. 数据安全性。
    对不同的用户定义不同的视图,使用户只能看到与自己有关的数据。数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定行和特定的列上。通过视图,用户可以被限制在数据的不同子集上。

  2. 查询简单化。
    为复杂的查询建立一个视图,用户不必输入复杂的查询语句,只需针对此视图做简单的查询即可。那些被经常使用的查询可以被定义为视图,从而使用户不必为以后的操作每次都指定全部的条件。

  3. 逻辑数据独立性。
    视图可以使应用程序和数据库表在一定程度上独立。如果没有视图,应用一定是建立在表上的。有了视图之后,程序可以建立在视图之上,从而程序与数据库表被视图分割开来。

对于视图的操作,例如,查询只依赖于视图的定义,当构成视图的基本表需要修改时,只需要修改视图定义中的子查询部分,而基于视图的查询不用改变。

视图的缺点

  1. 性能。
    SQL Server必须把视图的查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么,即使是视图的一个简单查询,SQL Server也把它变成一个复杂的结合体,需要花费一定的时间。
  2. 修改限制。
    当用户试图修改视图的某些行时,SQL Server必须把它转化为对基本表的某些行的修改。事实上,当从视图中插入或者删除时,情况也是这样。对于简单视图来说,这是很方便的,但是,对于比较复杂的视图,可能是不可修改的,这些视图有如下特征:
      a.有UNIQUE等集合操作符的视图。
      b.有GROUP BY子句的视图。
      c.有诸如AVG\SUM\MAX等聚合函数的视图。
      d.使用DISTINCT关键字的视图。
      e.连接表的视图(其中有些例外)
  3. 创建视图的限制:
    在创建视图时,还要注意试图必须满足以下几点限制:
    <1>.不能将规则或者DEFAULT定义关联于视图。
    <2>.定义视图的查询中不能含有ORDER BY\COMPURER\COMPUTER BY 子句和INTO关键字
    <3>.如果视图中某一列是一个算术表达式、构造函数或者常数,而且视图中两个或者更多的不同列拥有一个相同的名字(这种情况通常是因为在视图的定义中有一个连接,而且这两个或者多个来自不同表的列拥有相同的名字),此时,用户需要为视图的每一列指定列的名称。

如何使用视图

一般建议对视图的修改:
- 单表视图一般用于查询和修改,会改变基本表的数据,
- 多表视图一般用于查询,不会改变基本表的数据。

SQL CREATE VIEW 语法

CREATE VIEW view_name ASSELECT column_name(s)FROM table_nameWHERE condition
原创粉丝点击