数据库之视图、索引和游标

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第9章 视图、索引和游标
9.1 视图
9.2 索引
9.3 游标
9.1 视图
9.1.1 视图概述 视图是从一个或多个表或视图中导出的表,其结构和数据是 建立在对表的查询基础上的。视图不是真实存在的基础表 而是一张虚表,视图所对应的数据并不实际地以视图结构 存储在数据库中,而是存储在视图所引用的表中。 1. 视图的优点 使用视图有很多优点,主要表现在: 1) 为用户集中数据,简化用户的数据查询和处理。使得分散 在多个表中的数据,通过视图定义在一起。 2) 简化操作,屏蔽了数据库的复杂性。 3) 重新定制数据,使得数据便于共享。 3) 合并分割数据,有利于数据输出到应用程序中。 4) 简化了用户权限的管理,增加了安全性。
9.1 视图
9.1.7 删除视图 如果不需要视图,则可以将视图删除。可以在SQL Server Management Studio中选中要删除的视图并删除,就能 删除视图。也可以在查询窗口中执行T-SQL语句删除视图。 T-SQL提供了视图删除语句DROP VIEW。其语法格式如 下: DROP VIEW view_name 【例9-7】删除【例9-1】创建的学生_课程_分数视图。 DROP VIEW 学生_课程_分数 GO
9.1 视图
【例9-6】修改【例9-1】创建的学生_课程_分数视图,包 括计算机学院的男生的学号、姓名、性别,和他们选修的 课程号、课程名、分数。 ALTER VIEW 学生_课程_分数 AS SELECT 学生表.学号,姓名,性别,课程表.课程号,课程名,分数 FROM 学生表,课程表,成绩表 WHERE 学生表.学号=成绩表.学号 AND 课程表.课程号=成绩表.课程号 AND 院系名称='计算机学院' AND 性别='男' GO
9.1 视图
9.1.4 查询视图 视图创建完毕,就可以如同查询基本表一样查询视图了。可以在SQL Server Management Studio中选中要查询的视图并打开,浏览该 视图查询的所有数据。也可以在查询窗口中执行T-SQL语句查询视图。 【例9-3】查询学生_课程_分数视图,统计“数据库应用”课程的总分 和平均分。 SELECT 总分=SUM(分数),平均分=AVG(分数) FROM 学生_课程_分数 WHERE 课程名='数据库应用' GO 【例9-4】查询姓“张”的职工进货的零件名称。 SELECT 零件名称 FROM 进货视图 WHERE 姓名LIKE '张%' GO
9.1 视图
9.1.6 修改视图定义 修改视图定义,与修改基本表结构不一样。修改基本表结构 是指重新定义列名、属性、约束等,而修改视图定义是指 修改视图的指定列的列名、别名、表名、是否输出、顺序 类型等属性。 可以在SQL Server Management Studio中选中要修改的 视图并修改,就能修改视图定义了。也可以在查询窗口中 执行T-SQL语句修改视图定义。T-SQL提供了视图创建语 句ALTER VIEW。其语法格式如下: ALTER VIEW [ schema_name . ] view_name [ ( column [ ,...n ] ) ] [ WITH <view_attribute> [ ,...n ] ] AS select_statement [ ; ] [ WITH CHECK OPTION ]
9.2 索引
索引包含从表或视图中一个或多个列生成的键,以及映射到 指定数据的存储位置的指针。通过创建设计良好的索引以支 持查询,可以提高查询性能。对于包含SELECT、UPDATE 或DELETE语句的各种查询,索引会很有用。 在数据库系统中建立索引主要有以下作用: 1) 快速存取数据。 2) 保证数据的一致性。 3) 实现表与表之间的参照完整性。 4) 在使用GROUP BY、ORDER BY子句进行查询时,利用 索引可以减少排序和分组的时间。
9.1 视图
在SQL Server 2005中创建标准视图主要有两种方式:一种 方式是在SQL Server Management Studio中使用向导创 建视图,另一种方式是通过在查询窗口中执行T-SQL语句创 建视图。T-SQL提供了视图创建语句CREATE VIEW。其语
法格式如下: CREATE VIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ] [ WITH <view_attribute> [ ,...n ] ] AS select_statement [ ; ] [ WITH CHECK OPTION ]
第9章 视图、索引和游标
数据库的基本表是按照数据库设计人员的观点设计的, 并不一定符合用户的需求。SQL Server 2005可以根据 用户需求重新定义表的数据结构,这种数据结构就是视 图。 在数据库系统中,为了迅速地从庞大的数据库中找到所 需要的数据,SQL Server 2005提供了类似书的目录作 用的索引技术。通过对数据库中表设置索引,可以大大 加快数据的检索速度。SQL Server 2005还提供了一种 称为游标的机制,来处理数据。 本章主要介绍SQL Server 2005数据库系统视图的创建 以及使用,索引类型及创建、使用,游标的创建以及使 用。
9.1 视图
9.1.5 更新视图 通过更新视图数据(包括添加、修改和删除)可以修改基本表数据。但 并不是所有的视图都可以更新,只有对满足可更新条件的视图才能进 行更新。 只要满足下列条件,即可通过视图修改基础基表的数据: 1) 任何修改(包括UPDATE、INSERT和DELETE语句)都只能引用一 个基表的列。 2) 视图中被修改的列必须直接引用表列中的基础数据。不能通过任何其 他方式对这些列进行派生,如通过聚合函数、计算(如表达式计算)、 集合运算等。 3) 被修改的列不受GROUP BY、HAVING、DISTINCT或TOP子句的影 响。 即使是可更新视图,也不能随意更新数据。如果视图所依赖的基本表有 多个时,不能向该视图添加数据,因为这将影响多个基本表。修改数据 时,若视图依赖于多个基本表,那么一次修改只能修改一个基本表中的 数据。删除数据时,若视图依赖于多个基本表,那么不能通过视图删除 数据。
9.2 索引
9.2.2 创建索引 创建索引时,首先必须考虑以下设计准则: 1. 设计索引时应考虑的准则 (1) 创建索引之前应考虑的准则 在创建索引之前应考虑如下准则: 1) 了解数据库本身的特征。 2) 了解最常用的查询的特征。 3) 了解查询中使用的列的特征。 4) 确定哪些索引选项可在创建或维护索引时提高性能。 5) 确定索引的最佳存储位置。
9.1 视图
10) 不能为视图定义全文索引定义。 11) 不能创建临时视图,也不能对临时表创建视图。 12) 不能删除参与到使用SCHEMABINDING子句创建的视 图中的视图、表或函数,除非该视图已被删除或更改而不 再具有架构绑定。另外,如果对参与具有架构绑定的视图 的表执行ALTER TABLE语句,而这些语句又会影响该视 图的定义,则这些语句将会失败。 13) 下列情况下必须指定视图中每列的名称: ① 视图中的任何列都是从算术表达式、内置函数或常量派生 而来。 ② 视图中有两列或多列原应具有相同名称。 ③ 希望为视图中的列指定一个与其源列不同的名称。
9.2 索引
9.2.3 创建索引视图 如果在查询中频繁地引用视图,可通过对视图创建惟一聚集索引来提高 性能。 【例9-10】根据工作人员表创建的视图,包括人员编号、姓名和职务列。 再使用T-SQL语句根据姓名列创建索引视图。 创建视图: CREATE VIEW 职工视图 WITH SCHEMABINDING AS SELECT 人员编号,姓名,职务 FROM dbo.工作人员表 GO 创建索引: CREATE UNIQUE CLUSTERED INDEX 职工视图索引 ON 职工视图(人员编号) GO
9.1 视图
2. 视图的使用范围 视图通常用来集中、简化和自定义wk.baidu.com个用户对数据库的不同 认识。通常在以下情况下使用视图: 1)着重于特定数据。 2)2) 简化数据操作。 3) 自定义数据。 4) 数据的导入与导出。 5) 跨服务器组合分区数据库
9.1 视图
9.1.2 视图的类型 在SQL Server 2005中,视图可以分为标准视图、索引视图 和分区视图。 标准视图组合了一个或多个表中的数据,用户可以使用标准 视图对数据库进行查询、修改、删除等基本操作。 索引视图是被具体化了的视图,即它已经过计算并存储。可 以为视图创建索引,即对视图创建一个惟一的聚集索引。 索引视图可以显著提高某些类型查询的性能。索引视图尤 其适于聚合许多行的查询。但它们不太适于经常更新的基 本数据集。 分区视图在一台或多台服务器间水平连接一组成员表中的分 区数据。这样,数据看上去如同来自于一个表。联接同一 个SQL Server实例中的成员表的视图是一个本地分区视 图。
9.2 索引
9.2.1 索引的分类 如果一个表没有创建索引,则数据行不按任何特定顺序存储,这种结构 称为堆集。 SQL Server 2005支持在表中任何列(包括计算列)上定义索引。索引 可以是惟一的,即索引列不会有两行记录相同,这样的索引称为惟一 索引。索引也可以是不惟一的。如果索引是根据单列创建的,这样的 索引称为单列索引。根据多列组合创建的索引称为复合索引。 按索引的组织方式的不同,可以将索引分为聚集索引和非聚集索引。 1. 聚集索引 聚集索引根据数据行的键值在表或视图中排序和存储这些数据行。索引 定义中包含聚集索引列。每个表只能有一个聚集索引,因为数据行本 身只能按一个顺序排序。 2. 非聚集索引 非聚集索引具有独立于数据行的结构。非聚集索引包含非聚集索引键值, 并且每个键值项都有指向包含该键值的数据行的指针。 聚集索引和非聚集索引都可以是惟一的。
9.1 视图
【例9-1】创建学生_课程_分数视图,包括计算机学院的学生的学号、 姓名,和他们选修的课程号、课程名、分数。 CREATE VIEW 学生_课程_分数 AS SELECT 学生表.学号,姓名,课程表.课程号,课程名,分数 FROM 学生表,课程表,成绩表 WHERE 学生表.学号=成绩表.学号 AND 课程表.课程号=成绩表.课程号 AND 院系名称='计算机学院' GO 【例9-2】创建进货视图,包括职工的姓名和零件名称。 CREATE VIEW 进货视图 AS SELECT 姓名,零件名称 FROM 工作人员表,库存零件表,出货单表 WHERE 工作人员表.人员编号=出货单表.人员编号 AND 库存零件表.零件编号=出货单表.零件编号
9.2 索引
在SQL Server 2005中创建索引主要有两种方式:一种方式 是在SQL Server Management Studio中使用向导创建 索引,另一种方式是通过在查询窗口中执行T-SQL语句创 建索引。 T-SQL提供了索引创建语句CREATE INDEX。其语法格式如 下: CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name ON <object> ( column [ ASC | DESC ] [ ,...n ] ) [ INCLUDE ( column_name [ ,...n ] ) ] [ WITH ( <relational_index_option> [ ,...n ] ) ] [ ON { partition_scheme_name ( column_name ) | filegroup_name | default} ]
9.1 视图
9.1.3 创建视图 在创建视图前应考虑如下准则: 1) 只能在当前数据库中创建视图。 2) 视图名称必须遵循标识符的规则,且对每个架构都必须惟 一。 3) 用户可以对其他视图创建视图。 5) 不能将AFTER触发器与视图相关联,只有INSTEAD OF 触发器可以与之相关联。 6) 定义视图的查询不能包含COMPUTE子句、COMPUTE BY子句或INTO关键字。 7) 定义视图的查询不能包含ORDER BY子句,除非在 SELECT语句的选择列表中还有一个TOP子句。 8) 定义视图的查询不能包含指定查询提示的OPTION子句。 9) 定义视图的查询不能包含TABLESAMPLE子句。
相关文档
最新文档