第9章 视图

更新时间:2023-09-25 04:50:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第9章 视图

【学习目标】

本章主要学习的内容为视图,视图就像一个窗口,通过窗口也许可以看到很多数据,也可能只看到少量的数据。本章的学习内容包括视图的作用、建立、修改和删除等内容。

本章学习要点: ? 视图的建立 ? 视图的使用 【学习导航】

为了保护数据的安全,数据库中引入视图的概念。视图是为了保护数据的安全而出现的。我们将要学习关于视图的所有操作。

本章主要内容见图8-1所示的学习导航。

图9-1 本章学习内容导航

9.1 视图的概述

视图是SQL SERVER中重要的数据库对象。视图常用于集中、简化和定制数据库中的数据信息,为用户从多角度观察数据库中的数据提供方便。

9.1.1 视图的基本概念

视图是一种常用的数据库对象,它将查询的结果以虚拟表的形式存储在数据库中。视图并不在数据库中以存储数据集的形势存在。视图的结构和内容是建立在对表的查询基础之上的,和表一样包括行和烈,这些行列数据都来源于其引用的其它表,并且是在引用视图过程中动态生成的。

视图中的内容由查询定义而来,并且视图和查询都是通过SQL语句定义的,他们有着很多相同之处,但又有很多不同之处。视图和查询的区别在于以下几点:

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

? 排序:查询的结果可以排序,而视图只有包括TOP子句时才能进行排序。 ? 加密:视图可以加密,但查询不能加密。

9.1.2 视图的作用

视图是在基表的基础上,通过查询语句生成的。对视图的操作最终要化为对基表的操作。那么,为什么要定义、使用视图呢?这是因为使用视图有很多优点。

1. 简化操作

视图可以是比较复杂的多表关联查询,每一次执行相同的查询,只需要一条简单的查询视图语句

1

就可以解决复杂查询的问题。视图简化了操作的复杂性,使初学者不必掌握复杂的查询语句,就可以实现多个数据表间的复杂查询工作。对一个视图的访问要比对多个表的访问容易的多,大大简化了用户的操作。

2.建立前台和后台的缓冲

在数据库开发过程中,可以通过调用视图来实现查询功能。通过对视图的调用,在数据表结构更改时,只要视图的输出列不发生变化,就可以避免对应用程序的修改。大大提高了数据库的开发效率,同时降低了开发成本。

3.合并分割数据

通过视图可以对表中数据进行水平分割或垂直分割。用户可以对一个表或多个表中的数据列进行有选择的查看,简化数据结构。可以通过在视图中使用where子句水平分割数据,限制表中显示的数据。

4.提高安全性

视图可以作为一种安全机制,通过视图可以限定用户查看和修改的数据表和列,其他的数据信息只能是由访问权限的用户才能查看或修改。如对于学生成绩,作为学生只能看到表中属于自己的各科成绩、排名等,而负责相关操作的人才有权限查看或修改。如果某一用户想要访问视图的结果集,必须被授予访问权限,视图所引用的表访问权限与视图权限的设置互不影响。

提高安全性在数据库开发设计时,对于不同级别用户共用同一个数据库时,应用的极其广泛。

9.1.3 视图的分类

在SQL Server中,视图可以分为标准视图、索引视图和分区视图3种类型。 1.标准视图

标准视图是不存储任何数据的视图,通常简称视图。 2.索引视图

索引视图是一种物化的视图,包含了一个唯一的聚集索引,用来加快一些数据的查询速度。SQL Server 2005允许为视图创建独特的聚集索引,从而让访问此类视图的查询的性能得到极大地改善。在创建了这样一个索引后,视图将被执行,结果集将被存放在数据库中。

一般用在经常使用并且含有多个表的连接操作查询中,不太适合为数据经常变化的表定义索引视图。

对于标准视图而言,为每个引用视图的查询动态生成结果集的开销很大,特别是对于那些涉及大量行进行复杂处理的视图更为可观。若经常在查询中引用这类视图,可通过在视图上创建惟一聚集索引来提高性能。在视图上创建惟一聚集索引时将执行该视图,并且结果集在数据库中的存储方式与带聚集索引的表的存储方式相同。

3.分区视图

分区视图是一个或多个服务器中的一组表中的分区数据的视图,它使所有的数据看起来像保存在同一个表中。SQL Server 2005的分区视图分为局部分区视图和分布式分区视图。局部分区视图中所有定义视图使用的表和其他的视图必须在同一个SQL服务器实例中;分布式分区视图中至少有一个定义视图的表或视图在远程服务器上。

以下重点讲解对标准视图的操作。

2

9.2 创建视图

用户创建视图可以基于表,也可以基于其它视图。

在SQL Server 2005中创建视图,创建者必须拥有创建视图的权限,并且对视图中引用的基表或视图有许可权。此外,创建视图前还应该注意以下几点。

? 只能在当前数据库中创建视图。

? 在一个视图中最多引用1024列,视图中记录的行数限制由基表中的记录数目决定。 ? 可以将视图创建在其它视图上,SQL Server 2005中允许32层的视图嵌套。 ? 不能在视图上创建全文索引,不能将规则、默认榜定在视图上。 ? 不能在临时表上创建视图,也不能创建临时视图。

? 定义视图的查询语句中不能包含ORDER BY、COMPUTE、COMPUTE BY子句和INOT关键字。 对创建视图有了基本的了解之后,就可以根据不同的目的创建视图了。在SQL Server 2005种,可以使用SQL Server Management Studio或T-SQL语句创建视图。

1. 使用SQL Server Management Studio创建视图

【案例9-1】在stu数据库中,创建一个名称为“软技05级1班成绩”的视图,使用此视图从“student”表、“studcourse”表、“class”表和“course”表中查询出05软件技术1班学生的学号、姓名、班级名称、课程名称和成绩。步骤如下:

(1)启动SQL Server Management Studio,在【对象资源管理器】窗口中,依次展开【数据库】→【stu】节点。

(2)右击【视图】节点,如图9-2所示,在弹出的快捷菜单中单击【新建视图】命令,打开如图9-3所示的【视图设计器】窗口和【添加表】对话框。

图9-2 对象资源管理器

图9-3 【视图设计器】窗口和【添加表】对话框

(3)在【添加表】对话框中选择建立新视图的基表、视图和函数。选择【student】、【class】、【studcourse】和【course】四张表,单击【添加】按钮,之后关闭【添加表】对话框。

(4)此时,所选的表都出现在【视图设计器】窗口的关系图窗格中。根据新建视图的需要,从基表中选择相应的列。

3

(5)在条件窗格中设置过滤记录的条件。如此次新建视图其中班级名称要求为“05软件技术1班”,那么在筛选器中输入class.c_name = '05软件技术1班'。

(6)设置完毕后,在【视图设计器】窗口中,单击工具栏中的T-SQL语法。语法正确后,单击

(验证SQL句法)按钮,检查

(执行SQL)按钮,预览视图返回的结果,如图9-4中所示。

图9-4 【视图设计器】窗口

(7)执行成功后,单击工具栏上的【保存】按钮,弹出【选择名称】对话框,在该对话框中为视图命名为“软技05级1班成绩”,单击【确定】按钮,将视图保存到数据库中。

2.使用T-SQL语句创建视图

使用T-SQL语言中的CREATE VIEW语句可以创建视图,其语法格式如下:

CREATE VIEW view_name[(column [,?n])]

[WITH ENCRYPTION] [,SCHEMABINDING] [,VIEW_METADATA] AS

select_statement [WITH CHECK OPTION]

CREATE VIEW语句的参数说明如下:

表9-1 CREATE VIEW语句的参数说明

参 数 view_name 视图的名称。 定义视图中的字段名。如果没有指定,则视图字段将获得与SELECT语句中的字段相同的名称。但对于以下情况必须指定字段名: column ? ? ? WITH ENCRYPTION

视图是从多个表中产生的,对于表中有数据列重名的时候。 当列是经过算术表达式计算、函数或常量派生出来的时候。 当视图中的某列不同于源表中列的名称时。 描 述 表示对视图文本进行加密,这样当查看syscomments表时,所见的txt 字段值只是4

一些乱码。 SCHEMABINDING 选项,防止视图所引用的表在视图未被调整的情况下发生改变的WITH SCHEMABINDING 选项。也就是说,一旦视图被指定了此选项,那么,在修改用于生成当前视图的表或视图时,一旦对当前视图产生影响(导致视图失效),则不允许修改。 指定为引用视图的查询请求浏览模式的元数据时,SQL Server 将向 DBLIB、ODBC 和 OLE DB API 返回有关视图的元数据信息,而不是返回基表或表。浏览模式的元数据是由 SQL Server 向客户端 DB-LIB、ODBC 和 OLE DB API 返回的附加元数据,WITH VIEW_METADATA 它允许客户端 API 实现可更新的客户端游标。浏览模式的元数据包含有关结果集内的列所属的基表信息。 对于用 VIEW_METADATA 选项创建的视图,当描述结果集中视图内的列时,浏览模式的元数据返回与基表名相对的视图名。 当用 VIEW_METADATA 创建视图时,如果该视图具有 INSERT 或 UPDATE INSTEAD OF 触发器,则视图的所有列(timestamp 除外)都是可更新的。 AS 指定视图要执行的操作。 定义视图的查询语句。该语句可以使用多个表和其他视图。需要相应的权限才能在已创建视图的查询子句引用的对象中选择。视图不必是具体某个表的行和列的简单子集。可以使用多个表或带任意复杂性的查询子句的其他视图创建视图。 视图定义中的 SELECT 子句不能包括下列内容: select_statement ? ? ? ? ? COMPUTE 或 COMPUTE BY 子句 ORDER BY 子句,除非在 SELECT 语句的选择列表中也有一个 TOP 子句。 INTO 关键字 OPTION 子句 引用临时表或表变量。 强制针对视图执行的所有数据修改语句都必须符合在 select_statement 中设置WITH CHECK OPTION 的条件。通过视图修改行时,WITH CHECK OPTION 可确保提交修改后,仍可通过视图看到数据。 【案例9-2】在stu数据库中,创建一个“学生成绩”视图,使用该视图可以查看选课了的学生的基本信息及其课程成绩。SQL语句如下:

Use stu Go

Create view 学生成绩 As

Select student.s_num, student.s_name, student.s_sex, student.s_classid, stucourse .cs_id,

stucourse .sc_grade

From student, stucourse

Where student.s_num= stucourse.s_num Go

【案例9-3】在stu数据库中,以“教师”表为基础创建一个视图,其名称为“软件工程系教师”。使用该视图可以查看软件技术系所有教师的基本信息,并使用WITH CHECK OPTION。软件技术系的系部代码为‘01’。SQL语句如下:

5

本文来源:https://www.bwwdw.com/article/tfkd.html

Top