视图是从一个或多个表中导出的表,其结构和数据是建立在对表的查询基础上的。它是所创建的动态表的静态定义,所谓动态表是根据选择条件从一个或多个集中生成的表。
使用视图可以查看数据库中的数据,视图提供了预定义的语句作为数据库对象以备以后使用。视图不占物理存储空间,它只是一种逻辑对象。
在本章,主要介绍如何管理和使用视图,包括以下内容:
n 创建视图
n 显示视图
n 编辑视图
n 删除视图
n 使用视图
视图是表的一种类似于书签的对象。它包括参数、格式和SQL Server查询数据库和检索信息所需要的其他信息。确切地讲,视图是一个指定以后被引用时要检索行和列的SELECT语句存储定义。在一个视图中,最多可以定义一个或者多个表的1024个列。
在视图中被查询的表称为基表。大多数SELECT语句都可以在创建视图的时候使用。视图一般包括以下内容:
n 基表列的子集或者行的子集。
n 两个或者多个基表的联合。
n 两个或者多个基表的连接。
n 基表的统计总汇。
n 另外一个视图的子集。
n 视图和基表的混合。
使用视图有以下优点:
(1)集中用户使用的数据
使用视图可以创建一个更加容易控制的环境,在表中的一部分数据允许访问,而另外一部分数据则不允许访问。可以从视图中剔除那些不必要的冗余数据。用户可以非常方便地操作视图中的数据,并可以修改视图中的数据。
(2)掩码数据库的复杂性
使用视图可以把数据库的设计和用户的使用屏蔽开来,这样,数据库开发人员就可以使用不同的数据库设计方法,也不会影响到用户的使用。
(3)简化用户权限的管理
数据库拥有者可以把查询的权限授予一般用户,而保留基表的使用权限。这样,就可以保护基表的设计而不影响用户的查询。
(4)重新组织数据
用户可以根据需要,创建一个连接两个表或者多个表的复杂查询的视图,然后把视图中的数据导出到别的应用程序,从而可以对数据进行进一步的处理。
在Microsoft SQL Server 2000中,有两种创建视图的方法:
n 使用Transact_SQL语句。
n 使用Create View 向导。
在创建视图的时候,SQL Server首先验证在视图定义中所参考的对象是否存在以及视图的名称是否合法等。创建视图的语法形式如下:
CREATE VIEW view_name[(column[,…])]
[WITH ENCRYPTION]
AS
Select_statement
[WITH CHECK OPTION]
只有以下人员可以执行CREATE VIEW语句:System Administrtion(sysadmin),database owner(db_owner),data definition languate administration(db_ddladmin)或者有CREATE VIEW权限的成员。
在创建视图的时候,应该首先测试SELECT语句以确保系统能够返回正确的结果。创建视图的正确步骤为:
(1)编写SELECT语句。
(2)测试SELECT语句。
(3)检查结果的正确性。
(4)创建视图。
下面的例子创建了一个视图。这个视图的列TotalUnpaidFines是列fine_assessed减去fine_paid的结果。
USE library
GO
CREATE VIEW dbo.UnpaidFinesView(Member,TotalUnpaidFines)
AS
SELECT member_no,(sum(fine_assessed-fine_paid))
GROUP By member_no
HAVING SUM(fine_assessed-fine_paid)>0
使用CREATE VIEW向导创建视图的操作如下:
(1)运行SQL Server Enterprise Manager。
(2)选择Tools菜单,单击Wizards菜单命令,弹出如图8-1所示的对话框。
图8-1 选择向导对话框
(3)单击database左边的“+”,展开database,然后双击Create View Wizard,弹出如图8-2所示的对话框。
图8-2 欢迎对话框
(4)单击“下一步”按钮,打开如图8-3所示的选择数据库对话框。
图8-3 选择数据库
(5)在数据库下拉式列表中选择需要创建视图的表所在的数据库。
(6)单击“下一步”按钮,弹出如图8-4所示的选择对象对话框,在该对话框中选择所参考的对象。
图8-4 选择数据对象
(7)对象选择完成后,单击“下一步”按钮,弹出如图8-5所示的选择列对话框,根据需要选择需要显示的列。
图8-5 选择列
(8)选择完成后,单击“下一步”按钮,弹出如图8-6所示的设置条件对话框,在该对话框中键入条件表达式以搜索需要的信息。
图8-6 设置条件
(9)单击“下一步”按钮,弹出如图8-7所示的命名视图对话框,在文本框中键入所创建视图的名称。
(10)单击“下一步”按钮,弹出如图8-8所示的完成视图创建对话框,在列表中显示了一些设置信息,如果需要修改,单击“上一步”按钮,如果确认无误,单击“完成”按钮,完成视图的创建。
在创建视图的时候,应该考虑以下因素:
n 在CREATE VIEW语句中,不能包括ORDER BY、COMPUTE或者COMPUTE BY子句,也不能出现INTO关键字。
n 视图所参考的列最多为1024。
n 视图不能参考临时表。
n 在一个批处理语句中,CREATE VIEW语句不能和其它Transact-SQL语句混合使用。
n 尽量避免使用外连接创建视图。
图8-7 命名视图
图8-8 完成视图
创建视图后,视图的定义存储在系统表syscomments中,可以使用系统存储过程sp_helptext来显示syscomments表中存储的系统定义信息。
使用SQL Server Enterprise Manager显示视图定义的操作如下:
(1)运行SQL Server Enterprise Manager。
(2)选择使用的服务器,然后选择数据库,图8-9显示了Norhtwind数据库当前定义的视图扩展表。
图8-9 视图扩展表
(3)在要查看定义的视图上单击鼠标右键,在弹出的快捷菜单中选择Design View菜单命令,打开如图8-10所示的Design View窗口,在该窗口中显示了视图定义信息。
图8-10 Design View窗口
如果要编辑视图,可以在图8-10所示的窗口中对SQL Server语句进行编辑,然后单击工具栏上的“保存”按钮。
在Microsoft SQL Server 2000中,可以在视图创建之后根据需要对视图进行修改。如果具有CREATE VIEW的权限,就可以使用ALTER VIEW对视图进行修改。
ALTER VIEW语句的语法形式如下:
ALTER VIEW view_name
[(column[,…n])]
[WITH ENCRYPTION]
AS Select_statement
[WITH CHECK OPTION]
@ 如果在创建视图的时候使用了WITH ENCRYPTION选项和WITH CHECKOPTION选项,在使用ALTER VIEW选项的时候也必须包含这些选项。
下面的例子修改视图titleview,在视图中增加列advance。
USE library
GO
ALTER VIEW dbo.titleview
AS
SELECT title,author,dvance
FROM titles
如果视图不再需要,就可以将其删除。删除一个视图,就是删除视图的定义和赋予的全部权限。在删除参考表的时候,视图不会被删除,视图必须被单独删除。
删除视图有两种方法,可以使用DROP VIEW语句删除,也可以使用SQL Server Enterprise Manager进行删除。
DROP VIEW语句的语法形式如下:
DROP VIEW view_name1,view_name2,…view_namen
使用DROP VIEW语句可以一次删除多个视图。下面的例子删除了authors_view视图。
DROP VIEW authors_view
使用SQL Server enterprise Manager删除视图的操作如下:
(1)运行SQL Server Enterprise Manager。
(2)用鼠标右键单击视图,弹出一个快捷菜单。
(3)用鼠标右键单击快捷菜单中“删除”菜单命令,弹出如图8-11所示的对话框。
(4)单击Drop All按钮将选定的视图删除。
@ 在删除视图之前,可以单击Show Dependencies按钮显示对象相关性。
图8-11 Drop Objects对话框
为了修改视图的定义,常常需要查看视图定义信息,表8-1列出了系统表和视图的信息。另外,也可以使用SQL Server Enterprise Manager查看视图定义。
表8-1 视图和系统信息表
|
系统表或信息模式视图 |
显示信息 |
|
Information_schema.tables,sysobjects |
视图名称 |
|
Information_schema.views,syscomments |
视图定义 |
|
Information_schema.view_table_usage |
基表名称 |
|
Information_schema.view_column_usage,syscolumn |
在视图中定义的列 |
|
Sysdepends |
视图的依赖 |
|
sysprotects |
视图的权限 |
使用SQL Server Enterprise Manager查看视图定义的操作如下:
(1)运行SQL Server Enterprise Manager。
(2)选择服务器和要查看的视图所在的数据库,打开视图列表。
(3)用鼠标右键单击要查看的视图,弹出如图8-12所示的菜单。
图8-12 视图菜单
(4)单击“属性”菜单命令,弹出如图8-13所示的视图属性对话框。
图8-13 视图属性对话框
(5)在图8-13所示的视图属性对话框中,显示了视图的名称、所有者、创建日期和创建视图的Transact-SQL语句。单击Permissions按钮,弹出如图8-14所示的对话框,该对话框显示对视图具有许可权限的数据库用户和角色。
图8-14 Permissions对话框
(6)在图8-14所示的对话框中,单击“确定”按钮保存对视图属性所做的修改,并关闭窗口,单击“应用”按钮保存对视图所做的修改,但不关闭对话框,单击“取消”按钮取消对视图所做的修改,关闭对话框。
有时候,不允许用户看到视图的定义信息。可以通过对系统表syscomments加密来隐藏视图信息。可以在视图定义语句中增加WITH ENCRYPTION选项来加密包含CREATE VIEW语句文本的系统表syscomments。
下面是一个加密视图的例子:
USE library
GO
CREATE VIEW dbo.UnpaidFinesView(Member,TotalUnpaidFines)
WITH ENCRYPTION
AS
SELECT member_no,(sum(fine_assessed-fine_paid))
FROM loanhist
GROUP BY member-no.fine_assessed-fine_paid
HAVING SUM(fine_assessed-fine_paid)>0
如果不希望用户看到视图的定义,最好对视图进行加密,不要从系统表syscomments中把相关内容删除,因为如果删除系统表syscomments中的内容,系统表就变得不可用。
加密视图定义的缺点是当用户升级数据库或SQL Server时视图不能自动生成。因为在升级的时候,视图定义被用来重新生成视图,而加密定义没有这个功能。如果删除了系统表syscomments中的视图定义,也不能升级数据库。
视图创建后,可能要重新命名视图,在Microsoft SQL Server 2000中,有两种命名视图的方法:
n 使用系统存储过程sp_rename。
n 使用SQL Server Enterprise Manater。
使用系统存储过程sp_rename命名视图的语法形式如下:
sp_rename ola_name,new_name
比如,sp_rename name1,name2就将name1视图重新命名为name2。
@ 也可以用系统存储过程sp_rename重新命名其它数据库对象,比如表列、存储过程、触发器、索引等。
使用SQL Server Enterprise Manager命名视图的步骤如下:
(1)运行SQL Server Enterprise Manager并选择相应的服务器。
(2)用鼠标右键单击要命名的视图,在弹出的菜单中选择“重命名”菜单。
(3)视图名称变为可编辑状态(高亮),键入新的名称并回车即可。
本章讲解了视图定义、修改、使用等内容。通过本章的学习,读者应该掌握下列内容:
n 视图是查看数据库表中数据的一种方法。视图能存储预定义的查询语句,作为数据库中的对象以备以后使用。视图只是一种逻辑对象,并不是物理对象,因此视图不占用物理存储空间。在视图中被查询的表称为视图的基表。
n 使用视图有许多优点,例如集中用户使用的数据、屏蔽数据 的复杂性、简化权限管理以及重新组织数据以便输出到其他应用程序中等等。
n 使用CREATE VIEW语句创建视图。
n 使用Create View Wizard向导创建视图。
n 使用SQL Server Enterprise Manager创建视图。
n 使用ALTER VIEW语句修改视图。
学会修改视图、删除视图、查看视图定义信息、重新命名视图等操作。