1
管理视图
? 创建视图
? 修改和重命名视图
? 查看视图信息、删除视图
? 通过视图修改记录
2
? 视图是从一个或者多个表或视图中导出的表,
其结构和数据是建立在对表的查询基础上的。
和真实的表一样,视图也包括几个被定义的数
据列和多个数据行,但从本质上讲,这些数据
列和数据行来源于其所引用的表。因此,视图
不是真实存在的基础表而是一个虚拟表,视图
所对应的数据并不实际地以视图结构存储在数
据库中,而是存储在视图所引用的表中。
视图的概念
3
使用视图的优点和作用
? 可以使视图集中数据、简化和定制不同用
户对数据库的不同数据要求。
? 使用视图可以屏蔽数据的复杂性,用户不
必了解数据库的结构,就可以方便地使用和
管理数据,简化数据权限管理和重新组织数
据以便输出到其他应用程序中。
? 视图可以使用户只关心他感兴趣的某些特
定数据和他们所负责的特定任务,而那些不
需要的或者无用的数据则不在视图中显示。
? 视图大大地简化了用户对数据的操作。
4
? 视图可以让不同的用户以不同的方式看到
不同或者相同的数据集。
? 在某些情况下,由于表中数据量太大,因
此在表的设计时常将表进行水平或者垂直分割,
但表的结构的变化对应用程序产生不良的影响。
? 视图提供了一个简单而有效的安全机制。
5
利用企业管理器管理视图
? 创建视图
? 修改视图
? 重命名视图
? 删除视图
6
1 利用向导创建视图
? 图 1-1 --图 1-8 是利用向导创建视图 的具体步骤。
图 1-1 选择工具菜单中的向导命令
7
图 1-2 欢迎使用创建视图向导对话框
8
图 1-3 选择数据库对话框
9
图 1-4 选择对象对话框
10
图 1-5 选择字段对话框
11
图 1-6 定义限制对话框
12
图 1-7 命名视图对话框
13
图 1-8 完成创建视图向导对话框
14
2,利用企业管理器创建视图
? 图 2-1,图 2-2 (a), 2-2 (b), 图 2-3,
图 2-4,图 2-5,是利用企业管理器创建
视图的具体操作步骤,用户可根据图中
提示创建视图。
15
图 2-1 选择新建视图选项对话框
16
图 2-2 (a) 新建视图对话框 图 2-2 (b) 添加表菜单
17
图 2-3 添加表对话框
18
图 2-4 选择视图字段对话框
19
各项属性选型的含义
? 输出全部列:指定但前查
询中所有表的全部列都将
包含在结果集中。
? Distinct值:指定查询将在
结果集中去掉重复值。
? 加密浏览:指定对视图进
行加密处理。
? 绑定到架构:指定查询将
包含 with ties子句。
? 顶端:指定查询将包含 top
子句,返回前 n行。
? Percent,指定查询将包含
top子句,返回结果集中的
前 n%行。
图 2-5 视图属性对话框
20
创建视图的规则和限制
? 创建视图时应该注意以下情况,
? 只能在当前数据库中创建视图 。
? 如果视图引用的基表或者视图被删除, 则该视图不能再被使
用, 直到创建新的基表或者视图 。
? 如果视图中某一列是函数, 数学表达式, 常量或者来自多个
表的列名相同, 则必须为列定义名称 。
? 不能在视图上创建索引, 不能在规则, 缺省, 触发器的定义
中引用视图 。
? 当通过视图查询数据时, SQL Server要检查以确保语句中
涉及的所有数据库对象存在, 而且数据修改语句不能违反数
据完整性规则 。
? 视图的名称必须遵循标识符的规则, 且对每个用户必须是唯
一的 。 此外, 该名称不得与该用户拥有的任何表的名称相同 。
21
修改视图
? 步骤,
? 1、打开企业管理器,在树状目录中展开
要修改的数据库节点。
? 2、选择要修改的视图节点,点击鼠标右
键,在弹出菜单中选择“设计视图”。
? 则可以进行关于视图的修改。
22
重命名视图
? 步骤,
? 1、打开企业管理器,选择数据库节点及其视
图节点。
? 2、选择下列操作中的任意一个,
? 单击鼠标右键,在弹出菜单中选择“重命名”
? 连续单击视图名两次。
? 按下 f2键
? 3、键入新的名称后,回车即可。
23
删除视图
? 步骤,
? 1、打开企业管理器,选中相应的数据库及其
视图节点。
? 2、选择下列操作中的任意一个,
? 单击鼠标右键,在弹出菜单中选择命令“删除”
? 按下 delete键。
? 3、执行完第二步后,会弹出“除去对象”对
话框,在该对话框中单击“全部除去”按钮,
即可。
24
使用 Transact-SQL语言管理视图
? 创建视图
? 修改视图
? 删除视图
25
创建视图
?使用 Transact-SQL语句中的 CREATE
VIEW创建视图的语法形式如下,
?CREATE VIEW view_name
[ ( column [,...n ] ) ]
[ WITH ENCRYPTION ]
AS
select_statement
[ WITH CHECK OPTION ]
26
参数说明如下
? view_name用于指定视图的名称,
? Column用于指定视图中的字段名称。
? WITH ENCRYPTION表示 SQL Server 加密
包含 CREATE VIEW 语句文本在内的系统表
列。
? select_statement用于创建视图的 SELECT语句,
利用 SELECT命令可以从表中或者视图中选择
列构成新视图的列。
? WITH CHECK OPTION用于强制视图上执行
的所有数据修改语句都必须符合由
select_statement 设置的准则。
27
? 例:在 company数据库中创建一个视图,要求该
视图返回的结果集中包含信息项目名称、客户名
称、员工的姓名、开始日期和预计工期。
? Use company
? Create view 项目信息视图 as
? Select a.项目名称,b.客户名称,c.姓名,a.开始日
期,a.预计工期
? From project as a inner join customer as b
? On a.客户编号 =b.客户编号 inner join employee
as c
? On a.负责人编号 =b.客户编号 and a.负责人编号
=c.编号
? Where a.客户编号 =b.客户编号 and a.负责人编号
=c.编号
? Go
28
查看视图定义
? sp_helptext ‘项目信息视图’
29
查看视图信息
查看视图信息,
? 语法,SP_HELP 对象名称 显示视图的特征
? 语法,SP_HELPTEXT 视图名:显示视图内
容, 即在系统表中的定义 。
? 在企业管理器中查看视图的定义文本, 步骤,
? 1,选择要查看的视图节点
? 2,单击鼠标右键, 在弹出菜单中选择, 属性,
命令, 打开, 查看属性, 对话框 。 在, 文本,
对话框中可以看到视图的定义 。
30
指定字段别名
? 可以通过在 create view语句中指定字段
别名。例如:将上例中的项目名称、客
户名称、姓名、开始日期、预计工期指
定别名为:项目名称、项目合作客户、
项目负责人、项目开始日期、项目语句
工期。具体实现如下,
31
? Use company
? Create view 项目信息别名视图 (项目名称,项目合
作客户,项目负责人,项目开始日期,项目预计工期 )
? as
? Select a.项目名称,b.客户名称,c.姓名,a.开始日
期,a.预计工期
? From project as a inner join customer as b
? On a.客户编号 =b.客户编号 inner join employee
as c
? On a.负责人编号 =b.客户编号 and a.负责人编号
=c.编号
? Where a.客户编号 =b.客户编号 and a.负责人编号
=c.编号
? Go
32
使用 with encryption子句加密
? 若在定义视图的 create view 语句中添加
with encryption子句,则普通用户仍然想
使用系统存储过程 sp_helptext查看该视
图的定义文本,将得到提示信息:对象
备注已加密。
? 若通过企业管理器查看视图定义文本,
也会得到相应的类似的提示信息。
33
使用 with check option子句
? 例如:创建一个视图“男员工资料视图”
? Create view 男员工资料视图
? As select * from employee
? Where 性别 =‘男’
? 但是,却可以在该视图中插入一条性别为“女”
的记录。如,insert into 男员工资料视图 (编号,
姓名,性别,工资 )
? Values(16,’李四’,’女’,‘ 2500’)
? 如何解决呢?
34
? 可以在 create view语句中添加 with check
option子句,强制再通过视图插入或修改的数
据满足视图定义中的 where 条件。即,
? Create view 男员工资料视图
? As select * from employee
? Where 性别 =‘男’
? With check option
? 此时再进行插入女员工数据,则不被允许。
35
修改视图
? 1,修改视图, 使用 ALTER VIEW语句修改
视图 。
?ALTER VIEW view_name
?[(column[,...n])]
[WITH ENCRYPTION]
AS
select_statement
[ WITH CHECK OPTION ]
? 注意:语法和 create view完全相同, 只
是此时的 view_name必须是已经存在是视
图名 。
36
? 例:使用 create view语句在数据库中创建
视图“男员工工资视图”,要求返回所
有字段,并加密视图定义。然后使用
alter view语句按如下要求对该视图进行
修改,
? 只留下字段“姓名”和“工资”,去掉
其余字段。
? 为字段“姓名”和“工资”加上字段别
名,分别为“男员工姓名”和“员工工
资”
? 解密视图定义
? 加上 with check option子句。
37
? Use company
? Go
? Create view 男员工工资视图
? With encryption as
? Select * from employee where 性别 =‘男’
? --查看视图定义
? Exec sp_helptext ‘男员工工资视图’
? --由于加密,无法看到。下面修改
? Alter view 男员工工资视图 (男员工姓名,员工工
资 ) as
? Select 员工姓名,工资 from employee
? Where 性别 =‘男’ with check option
? Go
? Exec sp_helptext ‘男员工工资视图 ’
38
删除视图
? 使用 Transact-SQL语句 DROP VIEW删
除视图的语法形式如下,
?DROP VIEW {view_name} [,…n]
? 可以使用该命令同时删除多个视图, 只
需在要删除的视图名称之间用逗号隔开
即可 。
? 例,drop view 男员工工资视图
39
重命名视图
?可以使用系统存储过程 sp_rename修改视
图的名称,该过程的语法形式如下,
?sp_rename old_name,new_name
?例:把视图 view1重命名为 v_company
?sp_rename view1,v_company
40
使用视图操作表数据
? 检索数据
? 添加数据
? 更新数据
? 删除数据
41
使用视图检索数据
? 视图可以像表一样在查询语句的 from子
句中作为数据来源。
? 例如,select * from 项目信息视图
where 项目预计工期 <60
42
通过视图添加表数据
? 可以使用 insert语句向视图中添加表数据。
但是,使用 insert语句在视图中添加的数
据,将存储在视图参照的数据表中。
? 由于视图的特性,通过视图向数据表中
添加数据,必须满足下列条件,
43
? 1,使用 insert语句向数据表中插入数据的用户必须在
数据表中有插入数据的权限。
? 2、由于视图通常只引用表中的部分字段,那些在视
图中未引用的字段必须知道在没有指定取值的情况下
如何填充数据。如:允许空、有默认值、表示字段、
是 timestamp或 uniqueidentifier。
? 3,视图中不能包含多个字段值的组合,或包含了使
用统计函数的结果。
? 4、不能包含 distinct或 group by子句。
? 5、若使用了 with check option,则须符合 where子句
的插入条件。
? 6、若视图引用了多个数据表,则通过视图向数据表
中添加数据时,这个语句只能指定同一个表中的字段。
若希望通过一个引用了多个数据表的视图向这些数据
表中添加数据时,必须写多个 insert语句。
44
? 例:在数据表 company中创建视图“项目信息
视图”,要求返回的结果集中包含信息为:项
目名称、客户名称、员工姓名、开始日期和预
计工期。别名分别是:项目名称、项目合作客
户、项目负责人、项目开始日期和项目预计工
期。使用 insert语句通过此视图向引用的 3个数
据表中分别插入一条记录,要求如下,
? 向表 project中添加一条记录,字段项目名称为
‘ lys’,项目开始日期为,2000-10-01”,项目预
计工期为 90天。
? 向表 customer中添加一条记录,指定字段“客
户名称”的值为,realsim”。
? 向表 employee中添加一条记录,指定字段“姓
名”的值为“赵六”
45
? Use company
? Go
? --创建查询
? 查询视图
? Insert into 项目信息视图 (项目名称,项目开始日
期,项目预计工期 )
? Values (‘lys’,’2000-10-01’,’90’)
? Insert into 项目信息视图 (项目合作客户 )
? Values (‘realsim’)
? Go
? Insert into 项目信息视图 (项目负责人 )
? Values (‘赵六 ’)
? go
46
更新视图中的数据
? 同样,可以使用 update语句,通过视图
对数据表中的数据进行更新。
? 注意:通过使用多个表的视图对数据表
进行更新也需要书写多个 update语句。
? 适用与 insert操作的许多限制同样适用与
update操作。
47
? 例:书写 update语句通过视图“项目信息视图”
更新表 project中项目名称为“市场调查”的记录
的“预计工期”字段值改为 120天。将 employee中
的姓名“张三”改为“李四”
? Use company
? Go
? Update 项目信息视图
? Set 项目预计工期= 120
Where 项目名称=‘市场调查’
Go
Update 项目信息视图
Set 项目负责人=‘李四’ where 项目负责人=‘张
三’
48
删除视图中的数据
? 使用 delete可以通过视图将数据表中的数据删除,
但是若视图应用了两个或两个以上的数据表,则
不允许删除视图中的数据。
? 通过视图删除的记录也不能违背视图定义的
where子句中的条件限制。
? Delete语句的语法如下,
? Delete view_name where search_condition
其中,view_name,视图名称
? Search_condition,搜索条件。
? 例,delete 项目信息视图
Where 项目负责人=‘赵六’