SQL Server基础概念--视图

rel="File-List" href="file:///C:%5CUsers%5CADMINI%7E1%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml"> rel="themeData" href="file:///C:%5CUsers%5CADMINI%7E1%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx"> rel="colorSchemeMapping" href="file:///C:%5CUsers%5CADMINI%7E1%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml">

视图可以被看成是虚拟表或存储查询。通过创建、修改和维护视图,可以自定义每位用户从不同的角度使用数据库。可通过视图访问的数据不作为独特的对象存储在数据库内。数据库内存储的是SELECT语句,系统在执行视图查询时,首先把它转换成等价的对基表的查询,然后执行修改了的查询,SELECT语句的结果集构成视图所返回的虚拟表。使用视图可实现下列功能

(1)    将用户限定在表中的特定行上。

(2)    将用户限定在特定列上。

(3)    将多个表中的列联接起来,使他们看起来像一个表。

(4)    聚合信息而非提供详细信息

 

创建视图的语法格式如下:

CREATE VIEW VIEW_NAME [ ( COLUMN[ ,N ] ) ]

WITH ENCRYPTION

     AS Select_statement

WITH CHECK OPTION

其中,WITH ENCRYPTION选项指定加密创建视图的文本;WITH CHECK OPTION选项指定检查通过视图修改数据的操作。当CREATE VIEW语句中不说明列名表时,列名由SELECT语句确定,但以下情况必须说明视图的列名:

(1)    SELECT的目标表中有内部函数或表达式

(2)    目标表中含有多表连接的连接字段名

(3)    视图中的字段名与导出表不同。

 

查询和视图的异同主要表现在以下几个方面:

(1)    存储。视图存储为数据库设计的一部分,而查询则不是。

(2)    更新结果。对视图和查询的结果集更新限制是不同的。

(3)    排序结果。可以排序任何查询结果,但是只有当视图包括TOP子句时才能排序视图。

(4)    生成查询计划。查询计划是内部策略,通过它数据库服务器尝试快速创建结果集。数据库服务器可以在保存视图后立即为视图建立查询计划。但是对于查询,数据库服务器直到查询实际运行时才能建立查询计划。

(5)    参数设置。可以为查询创建参数,但不能为视图创建参数。

(6)    加密。可以加密视图,但不能加密查询。

 

一般来说,视图的内容包括以下几个方面:

(1)    基表的列的子集或行的子集,也就是说视图可以是基表的一部分。

(2)    两个或多个基表的联合,也就是说视图是对多个基表进行联合运算检索的SELECT语句。

(3)    两个或多个基表的连接,也就是说视图是通过对若干个基表的连接生成的。

(4)    基表的统计汇总,也就是说视图不仅仅那是基表的投影,还可以是经过对基表的各种复杂运算的结果。

(5)    另外一个视图的子集,也就是说视图可以基于表,也可以基于另一个视图。

(6)    视图和基表的混合,在视图的定义中,视图和基表可以起到同样的作用。

 

视图的优点

(1)    视图对于数据库的重构提供了一定程度的逻辑独立性。当数据库重构时,用户和用户程序都不会受到影响。

(2)    简化了用户观点。把用户的注意力集中到他所关心的数据上,简化了用户的数据结构。

(3)    使用户以不同的方式看待同一数据。

(4)    对机密数据提供了自动的安全保护功能。

 

视图也是二维表,因此视图定义以后,用户可以如同操作基表那样对视图进行操作,但视图是一个虚拟表。对基表的各种查询形式对视图同样有效,如连接查询、分组、排序和嵌套查询等等。若一个视图是由单个基表导出的,并且只是去掉了基表的某些行和某些列(不包括键),我们称这类视图为行列子集视图。行列子集视图是可更新的。有些视图虽然不是行列子集视图,但是理论上讲仍是可更新的,而有些视图则是不可更新的。

 

在关系数据库中,并非所有的视图都是允许更新的,也就是说,有些视图的更新不能唯一地有意义地转换成对基表的更新。一般的数据库管理系统都有如下几种情况:

(1)    若视图的字段来自字段表达式或常数,则不允许对此视图执行INSERTUPDATE,但允许执行DELETE操作

(2)    若视图的字段是来自库函数,则此视图不允许更新

(3)    若视图的定义中有GROUP BY子句,则此视图不允许更新

(4)    若视图的定义中有DISTINCT选项,则此视图不允许更新

(5)    若视图的定义中有嵌套查询,并且嵌套查询的FROM子句中涉及的表也是导出该视图的基表,则此视图不允许更新

(6)    若视图是由两个以上基表导出的,则此视图不允许更新

(7)    一个不允许更新的视图上定义的视图也不允许更新。

 

视图本身并没有数据,如果满足一些限制条件,那么可以通过视图自由地插入、删除和修改数据。一般地,试图必须定义在一个表上并且不包含统计函数或在SELECT语句中不包含GROUP BY子句。在修改视图时,要注意以下一些条件:

(1)    不能同时影响两个或两个以上的基表。可以修改由两个或两个以上的基表得到的视图,但每一次修改的数据只能影响一个基表。

(2)    某些列不能修改。不能修改那些通过计算得到结果的列。

(3)    如果影响到表中那些没有默认值的列,那么可能引起错误。

(4)    如果在视图定义中指定了WITH CHECK OPTION选项,那么系统验证所修改的数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值