视图的操作与管理

繁简对译:[]  字体设置:[] 2008-10-14  阅读  次

第7章 视图的操作与管理 
视图概述
      视图是个虚表,是从一个或者多个表或视图中导出的表,其结构和数据是建立在对表的查询基础上的。
     使用视图的优点和作用主要有:
(1)视图可以使用户只关心他感兴趣的某些特定数据和他们所负责的特定任务,而那些不需要的或者无用的数据则不在视图中显示。
(2)视图大大地简化了用户对数据的操作。
(3)视图可以让不同的用户以不同的方式看到不同或者相同的数据集。
(4)在某些情况下,由于表中数据量太大,因此在表的设计时常将表进行水平或者垂直分割,但表的结构的变化对应用程序产生不良的影响。而使用视图可以重新组织数据,从而使外模式保持不变,原有的应用程序仍可以通过视图来重载数据。
(5)视图提供了一个简单而有效的安全机制。
7.1创建视图 
   SQL Server 2005提供了如下几种创建视图的方法:
(1)用SQL SERVER管理平台创建视图;
(2)用Transact-SQL语句中的CREATE VIEW命令创建视图;
(3)利用SQL SERVER管理平台的视图模板来创建视图。
  
   创建视图时应该注意以下情况:
(1)只能在当前数据库中创建视图,在视图中最多只能引用1024列,视图中记录的数目限制只由其基表中的记录数决定。
(2)如果视图引用的基表或者视图被删除,则该视图不能再被使用,直到创建新的基表或者视图。
(3)如果视图中某一列是函数、数学表达式、常量或者来自多个表的列名相同,则必须为列定义名称。
(4)不能在视图上创建索引,不能在规则、默认、触发器的定义中引用视图。
(5)当通过视图查询数据时,SQL Server要检查以确保语句中涉及的所有数据库对象存在,每个数据库对象在语句的上下文中有效,而且数据修改语句不能违反数据完整性规则。
(6)视图的名称必须遵循标识符的规则,且对每个用户必须是惟一的。此外,该名称不得与该用户拥有的任何表的名称相同。
7.1.1利用SQL SERVER管理平台创建视图
    利用SQL SERVER管理平台创建视图的具体操作步骤如下:
(1)在SQL SERVER管理平台中,展开指定的服务器,打开要创建视图的数据库文件夹,选择指定的数据库,右击该数据库图标,从弹出的快捷菜单中依次选择“新建(New)→视图”选项,如图7-1所示。接着就出现添加表、视图、函数对话框。如图7-2所示。
7.1.1利用SQL SERVER管理平台创建视图
(2)选择好创建视图所需的表、视图、函数后,通过单击字段左边的复选框选择需要的字段,如图7-3所示。单击工具栏中的“保存”按钮,或者单击鼠标右键,从快捷菜单中选择保存选项保存视图,输入视图名,即可完成视图的创建。
7.1.2利用Transact-SQL语句中的CREATE  VIEW命令创建视图
     使用Transact-SQL语句中的CREATE VIEW创建视图,其语法形式如下:
CREATE VIEW [schema_name.] view_name [(column [,...n])]
[WITH <view_attribute> [,...n]]
AS
select_statement
[WITH CHECK OPTION]
< view_attribute > ::=
 {ENCRYPTION|SCHEMABINDING|VIEW_METADATA}
7.1.2利用Transact-SQL语句中的CREATE  VIEW命令创建视图
例7-1 选择表s和sc中的部分字段和记录来创建一个视图,并且限制表s中的记录只能是计算机系的记录集合,视图定义为view_s。
程序清单如下:
create view view_s
as
select s.name,s.age,s.sex,
sc.cno,sc.score from s,sc
where s.sno=sc.sno and s.dept=’计算机’
 
例7-2 创建一个视图,使之包含复杂的查询。
程序清单如下:
CREATE VIEW ExampleView
WITH SCHEMABINDING
AS
SELECT sno, SUM(score) AS Sumscore, COUNT(*) AS CountCol FROM sc
 GROUP BY sno 
7.1.2利用Transact-SQL语句中的CREATE  VIEW命令创建视图
例7-3 创建一个视图,使之包含字符串的运算。
程序清单如下:
CREATE VIEW v_shyjl(shyxh, shj, xm, jglb, phr, bzh) AS
Select
distinct shyxh,substring(shj,1,10)+""+zhi,
t01_shbshy.xm,t012_shyjl.jglb,t012_shyjl.phr,t012_shyjl.bzh
from t01_shbshy, t012_shyjl
where t012_shyjl.xm=t01_shbshy.xm
 
其中shj列是从基表中取出两列并和一空字符串相加而得到的。这些都为基表中字段间的灵活运算提供了极大方便,从而使我们可以随心所欲地定制符合自己要求的数据。
7.1.3 利用模板创建视图 
       使用视图模板可以很容易地创建视图,其具体操作步骤如下;
(1)在SQL SERVER管理平台中,选择view菜单中的“模板资源管理器 ”选项,如图7-4所示。
(2)在出现的“模板资源管理器”选项中选择“创建视图”选项,如图7-5所示。
(3)按照提示输入视图名称,select语句后,执行此语句,即可创建视图。
7.2 修改、删除和重命名视图 
  
  7.2.1 修改视图
 
7.2.2 重命名视图
 
7.2.3  查看视图信息、删除视图
 
7.2.1 修改视图
  修改视图的方法有以下两种方法:
(1)在SQL SERVER管理平台中,右击要修改的视图,从弹出的快捷菜单中选择“设计视图”选项,出现视图修改对话框。该对话框与创建视图时的对话框相同,可以按照创建视图的方法修改视图。
(2)使用ALTER VIEW语句修改视图,但首先必须拥有使用视图的权限,然后才能使用ALTER  VIEW语句,该语句的语法形式如下:
  ALTER VIEW view_name
  [(column[,...n])]
  [WITH ENCRYPTION]
  AS
  select_statement
  [WITH CHECK OPTION
7.2.1 修改视图
例7-4 修改了视图V_employees,在该视图中增加了新的字段employees.salary,并且定义一个新的字段名称e_salary。
 
程序清单如下:
alter  view  dbo.employees(number,name,age,e_salary)
as
select  number,name,age,salary
from  employees
where  name=’张三’
7.2.2 重命名视图 
重命名视图方法有以下两种:
1. 在SQL SERVER管理平台中,选择要修改名称的视图,并右击该视图,从弹出的快捷菜单中选择“重命名”选项。或者在视图上再次单击,也可以修改视图的名称。接着该视图的名称变成可输入状态,可以直接输入新的视图名称。
2. 使用系统存储过程sp_rename来修改视图的名称,该过程的语法形式如下:
 sp_rename  old_name,new_name
例7-5 把视图v_all重命名为v_part。
程序清单如下:
 sp_rename  v_all,v_part
7.2.3 查看视图信息、删除视图 
1. 查看视图信息
可以使用系统存储过程sp_help显示视图特征,使用sp_helptext显示视图在系统表中的定义,使用sp_depends显示该视图所依赖的对象。使用SQL Server 查询分析器可以方便地显示视图属性信息,如图7-7所示。图7-8显示了使用sp_helptext存储过程显示视图的创建语句。
7.2.3 查看视图信息、删除视图 
1. 查看视图信息
利用select语句或SQL SERVER管理平台可以查看视图的输出数据。在SQL SERVER管理平台中,右击某个视图的名称,从弹出的快捷菜单中选择“打开视图”选项,在SQL SERVER管理平台中就会显示该视图的输出数据,如图7-9所示。
7.2.3 查看视图信息、删除视图 
2. 删除视图
对于不再使用的视图,可以使用SQL SERVER管理平台或者Transact-SQL语句中的DROP VIEW命令删除它。
 
使用Transact-SQL语句DROP  VIEW删除视图,其语法形式如下:
DROP VIEW  {view_name} [,…n]
可以使用该命令同时删除多个视图,只需在要删除的各视图名称之间用逗号隔开即可。
 
例7-6 同时删除视图v_student和v_teacher。
程序清单如下:
drop  view  v_student,v_teacher
7.3 通过视图修改记录 
使用视图修改数据时,需要注意以下几点:
(1)修改视图中的数据时,不能同时修改两个或者多个基表,可以对基于两个或多个基表或者视图的视图进行修改,但是每次修改都只能影响一个基表。
(2)不能修改那些通过计算得到的字段,例如包含计算值或者合计函数的字段。
(3)如果在创建视图时指定了WITH CHECK OPTION选项,那么使用视图修改数据库信息时,必须保证修改后的数据满足视图定义的范围。
(4)执行UPDATE、DELETE命令时,所删除与更新的数据必须包含在视图的结果集中。
(5)如果视图引用多个表时,无法用DELETE命令删除数据,若使用UPDATE命令则应与INSERT操作一样,被更新的列必须属于同一个表。
7.3.1 插入数据记录 
例7-7 创建一个基于表employees的新视图v_employees。
程序清单如下:
create  view  v_employees(number, name, age, sex, salary)
as
select  number, name, age, sex, salary
from  employees
where  name=’张三’
执行以下语句可向表employees中添加一条新的数据记录:
Insert  into  v_employees
Values(001,’李力’,22,’m’,2000)
7.3.1 插入数据记录 
例7-8 首先创建一个包含限制条件的视图v_employee2,限制条件为工资>2000,然后插入了一条不满足限制条件的记录,再用SELECT语句检索视图和表。
程序清单如下:
create  view  v_employee2
as
select *  from  employee
where  工资>2000
go
insert  into  v_employee2
values(002,’王则’,30,’f’,1000)
go
select *  from  employee
go
select *  from  v_employee2
go
7.3.1 插入数据记录 
例7-9 在例子7-8的基础上添加WITH  CHECK  OPTION选项。
程序清单如下:
create  view  v_employee3
as
select  *  from  employee
where  工资>2000
with  check  option
go
insert  into  v_employee3
values(002,’王则’,30,’f’,1000)
go
select  *  from  v_employee3
go
7.3.2 更新和删除数据记录 
使用视图可以更新数据记录,但应该注意的是,更新的只是数据库中的基表。使用视图删除记录,可以删除任何基表中的记录,直接利用DELETE语句删除记录即可。但应该注意,必须指定在视图中定义过的字段来删除记录。
 
•例7-10 创建了一个基于表employees的视图v_employees,然后通过该视图修改表employees中的记录。
 程序清单如下:
 create  view  v_employees
 as
 select  *  from  employees
 update  v_employees
 set  name=’张然’
 where  name=’张三’
•例7-11 利用视图v_employees删除表employees中姓名为张然的记录。
 程序清单如下:
 delete  from  v_employees
 where  name=’张然’
 

打印 收藏 关闭