(一)视图的基本概念
视图(View)是一个虚表
视图(VIEW)是以基表(TABLE)为基础,通过SELECT查询语句定义所形成的一个虚表。
视图的数据(行和列)来自定义视图的查询所引用的基表(基本表)或其他视图,并且在引用视图时动态生成。
视图(View)的特点
视图的列可以来自不同的表,是表的抽象和在逻辑意义上建立的新关系。
视图的建立和删除不影响表。
对视图内容的修改(插入、删除和更新)直接影响基本表。
视图来自多个基本表时,不允许插入和删除数据行。
(二)视图的作用
简化用户的操作
简化用户对数据的理解,简化用户的操作。
被经常使用的查询可以被定义为视图,使得用户不必为以后的操作每次都指定全部的条件。
提高安全性
应用视图,用户只能查询和修改他们所能见到的数据,并能限制到某些数据行,而其他数据既看不见也取不到。
虽然数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库表的特定行上。
提高逻辑数据独立性
视图可以使应用程序和数据库表在一定程度上独立。
如果没有视图,应用一定是建立在表上的。有了视图之后,程序可以建立在视图之上,从而使程序与数据库表被视图分隔开来。
视图也可以作为一种安全机制,以便使用户只能通过视图来访问数据,而不给其访问基表的权限。具体来讲,使用视图具有以下一些优点:
(1)聚焦特定的数据。视图使用户只能看到和操纵与他们有关的数据,不需要了解和使用的数据不加入视图,这样可以提高数据的安全性。
(2)简化数据操作。通过将复杂查询(如多表的连接查询)定义为视图,可以简化操作,不必在每次需要数据时都要提供所需的条件、限制等。
(3)定制用户数据。视图可以让使用同一数据库的不同用户看到不同的数据。
(4)导入/导出数据。可以使用视图将数据导出到其他应用程序,也可以将数据文件中的数据导入到视图中。
(5)合并分离的数据。使用UNION关键字可以将两个或更多基于不同表的查询结果合并为一个单独的结果集,可以将这样的结果集创建为一个视图,让用户看起来就像一个单独的表一样。
(6)屏蔽数据库的复杂性(隔离变化)。用户不必了解复杂的数据库中的表结构,并且数据库表的更改也不影响用户对数据库的使用。
(7)简化用户权限的管理。只需授予用户使用视图的权限,而不必指定用户只能使用表的特定列,也增加了安全性。
(8)便于数据共享。各用户不必都定义和存储自己所需的数据,可共享数据库的数据,这样同样的数据只需存储一次。
二、视图类型
在SQL Server 中,可以把视图分为三种类型,即标准视图、索引视图和分区视图。
1.标准视图
通常情况下的视图都是标准视图,它是一种逻辑对象,是从一个或几个基本表中导出的表,是一种虚拟表,不占用物理存储空间。
2.索引视图
索引视图和索引计算列将结果存储在数据库中供日后引用。只有当所有引用索引视图或索引计算列的连接可生成与创建索引的连接相同的结果集时,存储的这些结果才有效。如果要确保存储结果能得到正确地维护并返回一致的结果,则必须满足下列情况。
在执行create view命令时,必须将ansi_nulls和quoted_identifier选项设置为on状态。
在使用create table命令创建索引所引用的基础表时,ansi_nulls选项应设置为on。
该视图所引用的对象仅包括基础表而不包括其他的视图。
视图所引用的基础表必须与视图同属于同一数据库且有相同的所有者。
在创建视图时必须使用schemabinding选项。
如果视图引用了用户自定义函数,那么在创建这些用户自定义函数时也必须使用 schemabinding选项。
视图必须以owner.objectname的形式来使所引用的表或用户自定义函数。
视图所引用的函数必须是确定性的。
3.分区视图
分区视图在一台或多台服务器间水平连接一组成员表中的分区数据,使数据看起来就像来自一个表。SQL Server 2008可以区分本地分区视图和分布式分区视图。在本地分区视图中,所有参与表和视图都位于同一个SQL Server实例上。在分布式分区视图中,至少有一个参与表位于不同的(远程)服务器上。另外,SQL Server 2008还可以区分可更新分区视图和作为基础表只读副本的视图。
任务 创建视图
用户在数据库中创建了一个或多个表后,为了方便查询其中的数据,就可以为其创建相应的视图,用以代替表来完成从表中查询、插入、更新和删除数据的操作。创建视图可以使用SSMS和使用T-SQL语句。
一、 创建视图的原则
在开始创建视图前,非常有必要先了解一些创建视图的指导性原则:
(1)只有在当前数据库中才能创建视图。
(2)视图的命名必须遵循标识符命名规则,不能与表同名,且对每个用户视图名必须是唯一的,即多不同用户,即使定义相同的视图,也必须使用不同的名字。
(3)不能把规则、默认值定义绑定在视图之上,不能将触发器与视图相关联。
(4)不能在视图上建立任何索引,包括全文索引。
(5) 一个视图最多可以引用1024个列。
(6)可以将视图建立在其他视图或者引用视图的过程之上。
(7)定义视图的查询语句中不能包括ORDER BY、COMPUTE、COMPUTE BY子句或是INTO等关键词。
(8)不能创建临时视图,也不能在临时视图上创建视图。
(9)不能对视图进行全文查询,尽管基表上可能有全文索引而使用全文查询。
(10)默认状态下,视图中的列继承它们在基表中的名称。存在以下情况时,在创建视图时需要明确给出每一列的名称。
二、 使用SSMS创建视图
在了解了视图的概念和分类后,现在开始创建视图,首先介绍如何使用图形工具来创建视图。