当前位置:文档之家› 数据库原理与应用(12)第12章 视图

数据库原理与应用(12)第12章 视图


12.3.3 通过视图修改基表中数据 在视图上使用UPDATE语句修改数据时,也应该符合在视 图中修改数据的相关规则。同时需要遵守以下规则:
如果在视图定义中使用了WITH CHECK OPTION子句, 则所有在视图上执行的数据修改语句都必须符合定义视 图的SELECT语句中所设定的条件。如果使用了WITH CHECK OPTION子句,修改行时须注意不让它们在修 改完成后从视图中消失。任何可能导致行消失的修改都 会被取消,并显示错误信息。 SQL Server必须能够明确地解析对视图所引用基表中的 特定行所做的修改操作。不能在一个语句中对多个基础 表使用数据修改语句。因此,列在UPDATE语句中的列 必须属于视图定义中的同一个基表。 在修改记录时,要保证视图或基表中不存在自连接,否 则将无法修改记录。
12.2 创建视图
创建视图要考虑如下的原则:
只能在当前数据库中创建视图。 视图名称必须遵循标识符的规则。 可以在其他视图和引用视图的过程之上建立视图。SQL Server 2005允许嵌套多达32级视图。 视图上不能定义规则或默认值. 视图上不能定义AFTER触发器,但可以定义INSTEAD OF触发器。 定义视图的查询不可以包含COMPUTE或COMPUTE BY 子句或INTO关键字。 视图的SELECT语句中不能包含ORDER BY子句,除非 在SELECT语句的选择列表中还有一个TOP子句。 不能在视图上定义全文视图。 不能创建临时视图,也不能在临时表上创建视图。
第12章 视图
12.1 视图概述
视图是一个虚拟表,其内容由查询定义。视图是从一个或 者多个表中使用SELECT语句导出的。那些用来导出视图的表 称为基表。视图也可以从一个或者多个其他视图中产生。 对视图所引用的基础表来说,视图的作用类似于筛选。定 义视图的筛选可以来自当前或其他数据库的一个或多个表,或 者其他视图。所以说,视图是一种SQL查询。 在数据库中,存储的是视图的定义,而不是视图查询的数 据。
【例12.6】 给出以下程序的执行结果。
USE test GO --如果表table4存在,则删除 IF EXISTS(SELECT * FROM sysobjects WHERE name = 'table4' AND type='U') DROP TABLE table4 /*删除表table4*/ GO --如果视图viewl存在,则删除 IF EXISTS(SELECT * FROM sysobjects WHERE name = 'view1' AND type='V') DROP VIEW view1 /*删除视图view1*/ GO --创建表table4 CREATE TABLE table4(col1 int, col2 varchar(30)) GO
--向基表table4中插入个记录 INSERT INTO table4 VALUES (1,'第1行') GO INSERT INTO table4 VALUES (2,'第2行') GO --创建视图viewl CREATE VIEW view1 AS SELECT col2, col1 FROM table4 GO --查看table4的记录 SELECT * FROM table4 GO UPDATE view1 Set col2='第3行' WHERE col1=2 /*通过视图修改基表数据*/ GO --查看table4的记录 SELECT * FROM table4 执行结果 GO
(3)选中“st1_degree”视图,单击鼠标右键,在出现的 快捷菜单中选择“打开视图”命令,如图12.7所示。
2. 使用SELECT语句查询视图数据 将视图看成是表,直接使用SELECT语句查询其中的数据。 【例12.4】 给出以下程序的执行结果。其中,st1_degree 视图是例12.2创建的。
view_attribute定义为:
{ENCRYPTION | SCHEMABINDING | VIEW_METADATA}
【例12.2】 给出一个程序,创建一个名称为st1_degree的 视图,其中包括所有学生的姓名、课程和成绩。 解:对应的程序如下:
USE school GO CREATE VIEW st1_degree /*创建视图*/ AS SELECT student.姓名,course.课程名,score.分数 FROM student,course,score WHERE student.学号=score.学号 AND course.课程号=score.课程号 GO
(5)返回到SQL Server管理控制器,如图12.3所示,这三 个表已在第8章建立了关联关系,在图中反映这种关系(如果 已删除了表之间的关联关系,可以手工建立图12.3中表之间的 关联关系)。
关系图窗格
网格窗格
SQL 窗格
结果窗格
(6)在网格窗格中操作后,同时在SQL窗格中显示对应 的SELECT语句为:
视图具有下述优点和作用:
将数据集中显示。 简化数据操作。 自定义数据。 重新组织数据以便导入导出数据。 组合分区数据。
查询和视图虽然很相似,但还是有很多的区别。两者的 主要区别如下:
存储方式。视图存储为数据库设计的一部分,而查询 则不是。 更新结果。对视图和查询的结果集更新限制是不同的。 排序结果。查询结果可以任意排序,但只有视图包括 TOP子句时才能对视图排序。 参数设置。可以为查询创建参数,但不能为视图创建 参数。 加密。可以加密视图,但不能加密查询。
--创建视图viewl CREATE VIEW view1 AS SELECT col2, col1 FROM table4 GO --通过视图view1插入一个记录 INSERT INTO view1 VALUES ('第1行',1) GO INSERT INTO view1 VALUES ('第2行',2) --查看插入的记录 SELECT * FROM table4 GO 执行结果
SELECT TOP (100) PERCENT dbo.student.姓名,dbo.course.课程名, dbo.score.分数 FROM dbo.student INNER JOIN dbo.score ON dbo.student.学号 = dbo.score.学号 INNER JOIN dbo.course ON dbo.score.课程号 = dbo.course.课程号 ORDER BY dbo.student.姓名
12.2.2 使用SQL语句创建视图 使用CREATE VIEW语句创建视图的完整语法为:
CREATE VIEW [数据库名.] [所有者名.] 视图名 [(列名 [,…n])]
[WITH view_attribute [,…n ]] AS SELECT语句 [WI的“保存”按钮,然后在 弹出的对话框中输入视图的名称,这里输入st_degree。
(8)在设计好视图st_degree后,可以单击工具栏的“!” 按钮来执行,其结果显示在SQL Server管理控制器的结果窗 格中,如图12.6所示。
说明:当用户创建一个视图被存储到SQL Server 2005 系统中后,每个视图对应sysobjects系统表中一条记录,该 表中name列包含视图的名称,type列指出存储对象的类型, 当它为'V'时表示是一个视图。用户可以通过查找该表中的 记录判断某视图是否被创建。
12.2.1 使用SQL Server管理控制器创建视图 视图保存在数据库中而查询不是,因此创建新视图的过程 与创建查询的过程不同。通过SQL Server管理控制器不但可以 创建数据库和表,也可以创建视图。 【例12.1】 使用SQL Server管理控制器,在school数据库中 创建一个名称为st_degree的视图,包含学生姓名、课程名和分 数,按姓名升序排列。 解:其操作步骤如下: (1)启动SQL Server管理控制器。在“对象资源管理器” 中展开“LCB-PC”服务器节点。 (2)展开“数据库”节点。选中数据库“school”,展开该 数据库节点。
(3)视图中不能包含多个字段值的组合,或者包含了 使用统计函数的结果。 (4)视图中不能包含DISTINCT或GROUP BY子句。 (5)如果视图中使用了WITH CHECK OPTION,那 么在该子句将检查插入的数据是否符合视图定义中SELECT 语句所设置的条件。如果插入的数据不符合该条件,SQL Server会拒绝插入数据。 (6)不能在一个语句中对多个基表使用数据修改语句。 因此,如果要向一个引用了多个数据表的视图添加数据时, 必须使用多个INSERT语句进行添加。
【例12.5】 给出以下程序的执行结果。
USE test GO --如果表table4存在,则删除 IF EXISTS(SELECT * FROM sysobjects WHERE name = 'table4' AND type='U') DROP TABLE table4 /*删除表table4*/ GO --如果视图viewl存在,则删除 IF EXISTS(SELECT * FROM sysobjects WHERE name = 'view1' AND type='V') DROP VIEW view1 /*删除视图view1*/ GO --创建表table4 CREATE TABLE table4(col1 int, col2 varchar(30)) GO
(3)选中“视图”节点,单击鼠标右键,在出现的快捷 菜单中选择“新建视图”命令,如图12.1所示。
(4)此时,打开“添加表”对话框,如图12.2所示。在 此对话框中,可以选择表、视图或者函数等,然后单击“添 加”按钮,就可将其添加到视图的查询中。这里分别选择 student、course和score三个表,并单击“添加”按钮,最后 单击“关闭”按钮。
相关主题