SQL数据库9.ppt
《SQL数据库9.ppt》由会员分享,可在线阅读,更多相关《SQL数据库9.ppt(44页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据库的基本表是按照数据库设计人员的观点设计的,数据库的基本表是按照数据库设计人员的观点设计的,并不一定符合用户的需求。并不一定符合用户的需求。SQL Server 2005可以根据可以根据用户需求重新定义表的数据结构,这种数据结构就是视用户需求重新定义表的数据结构,这种数据结构就是视图。图。在数据库系统中,为了迅速地从庞大的数据库中找到所在数据库系统中,为了迅速地从庞大的数据库中找到所需要的数据,需要的数据,SQL Server 2005提供了类似书的目录作提供了类似书的目录作用的索引技术。通过对数据库中表设置索引,可以大大用的索引技术。通过对数据库中表设置索引,可以大大加快数据的检索速度。
2、加快数据的检索速度。SQL Server 2005还提供了一种还提供了一种称为游标的机制,来处理数据。称为游标的机制,来处理数据。本章主要介绍本章主要介绍SQL Server 2005数据库系统视图的创建数据库系统视图的创建以及使用,索引类型及创建、使用,游标的创建以及使以及使用,索引类型及创建、使用,游标的创建以及使用。用。第9章 视图、索引和游标视图、索引和游标 9.1 视图视图9.2 索引索引9.3 游标游标第9章 视图、索引和游标视图、索引和游标 9.1.1 视图概述视图概述视图是从一个或多个表或视图中导出的表,其结构和数据是视图是从一个或多个表或视图中导出的表,其结构和数据是建立在对
3、表的查询基础上的。视图不是真实存在的基础表建立在对表的查询基础上的。视图不是真实存在的基础表而是一张虚表,视图所对应的数据并不实际地以视图结构而是一张虚表,视图所对应的数据并不实际地以视图结构存储在数据库中,而是存储在视图所引用的表中。存储在数据库中,而是存储在视图所引用的表中。1.视图的优点视图的优点使用视图有很多优点,主要表现在:使用视图有很多优点,主要表现在:1)为用户集中数据,简化用户的数据查询和处理。使得分散为用户集中数据,简化用户的数据查询和处理。使得分散在多个表中的数据,通过视图定义在一起。在多个表中的数据,通过视图定义在一起。2)简化操作,屏蔽了数据库的复杂性。简化操作,屏蔽了
4、数据库的复杂性。3)重新定制数据,使得数据便于共享。重新定制数据,使得数据便于共享。4)合并分割数据,有利于数据输出到应用程序中。合并分割数据,有利于数据输出到应用程序中。5)简化了用户权限的管理,增加了安全性。简化了用户权限的管理,增加了安全性。9.1 视图视图2.视图的使用范围视图的使用范围视图通常用来集中、简化和自定义每个用户对数据库的不同视图通常用来集中、简化和自定义每个用户对数据库的不同认识。通常在以下情况下使用视图:认识。通常在以下情况下使用视图:1)着重于特定数据。着重于特定数据。2)简化数据操作。简化数据操作。3)自定义数据。自定义数据。4)数据的导入与导出。数据的导入与导出。
5、5)跨服务器组合分区数据库跨服务器组合分区数据库9.1 视图视图9.1.2 视图的类型视图的类型在在SQL Server 2005中,视图可以分为标准视图、索引视图中,视图可以分为标准视图、索引视图和分区视图。和分区视图。标准视图组合了一个或多个表中的数据,用户可以使用标准标准视图组合了一个或多个表中的数据,用户可以使用标准视图对数据库进行查询、修改、删除等基本操作。视图对数据库进行查询、修改、删除等基本操作。索引视图是被具体化了的视图,即它已经过计算并存储。可索引视图是被具体化了的视图,即它已经过计算并存储。可以为视图创建索引,即对视图创建一个惟一的聚集索引。以为视图创建索引,即对视图创建一
6、个惟一的聚集索引。索引视图可以显著提高某些类型查询的性能。索引视图尤索引视图可以显著提高某些类型查询的性能。索引视图尤其适于聚合许多行的查询。但它们不太适于经常更新的基其适于聚合许多行的查询。但它们不太适于经常更新的基本数据集。本数据集。分区视图在一台或多台服务器间水平连接一组成员表中的分分区视图在一台或多台服务器间水平连接一组成员表中的分区数据。这样,数据看上去如同来自于一个表。联接同一区数据。这样,数据看上去如同来自于一个表。联接同一个个SQL Server实例中的成员表的视图是一个本地分区视实例中的成员表的视图是一个本地分区视图。图。9.1 视图视图9.1.3 创建视图创建视图在创建视图
7、前应考虑如下准则:在创建视图前应考虑如下准则:1)只能在当前数据库中创建视图。只能在当前数据库中创建视图。2)视图名称必须遵循标识符的规则,且对每个架构都必须惟视图名称必须遵循标识符的规则,且对每个架构都必须惟一。一。3)用户可以对其他视图创建视图。用户可以对其他视图创建视图。5)不能将不能将AFTER触发器与视图相关联,只有触发器与视图相关联,只有INSTEAD OF触发器可以与之相关联。触发器可以与之相关联。6)定义视图的查询不能包含定义视图的查询不能包含COMPUTE子句、子句、COMPUTE BY子句或子句或INTO关键字。关键字。7)定义视图的查询不能包含定义视图的查询不能包含ORD
8、ER BY子句,除非在子句,除非在SELECT语句的选择列表中还有一个语句的选择列表中还有一个TOP子句。子句。8)定义视图的查询不能包含指定查询提示的定义视图的查询不能包含指定查询提示的OPTION子句。子句。9)定义视图的查询不能包含定义视图的查询不能包含TABLESAMPLE子句。子句。9.1 视图视图10)不能为视图定义全文索引定义。不能为视图定义全文索引定义。11)不能创建临时视图,也不能对临时表创建视图。不能创建临时视图,也不能对临时表创建视图。12)不能删除参与到使用不能删除参与到使用SCHEMABINDING子句创建的视子句创建的视图中的视图、表或函数,除非该视图已被删除或更改
9、而不图中的视图、表或函数,除非该视图已被删除或更改而不再具有架构绑定。另外,如果对参与具有架构绑定的视图再具有架构绑定。另外,如果对参与具有架构绑定的视图的表执行的表执行ALTER TABLE语句,而这些语句又会影响该视语句,而这些语句又会影响该视图的定义,则这些语句将会失败。图的定义,则这些语句将会失败。13)下列情况下必须指定视图中每列的名称:下列情况下必须指定视图中每列的名称:视图中的任何列都是从算术表达式、内置函数或常量派生视图中的任何列都是从算术表达式、内置函数或常量派生而来。而来。视图中有两列或多列原应具有相同名称。视图中有两列或多列原应具有相同名称。希望为视图中的列指定一个与其源
10、列不同的名称。希望为视图中的列指定一个与其源列不同的名称。9.1 视图视图在在SQL Server 2005中创建标准视图主要有两种方式:一种中创建标准视图主要有两种方式:一种方式是在方式是在SQL Server Management Studio中使用向导创中使用向导创建视图,另一种方式是通过在查询窗口中执行建视图,另一种方式是通过在查询窗口中执行T-SQL语句创语句创建视图。建视图。T-SQL提供了视图创建语句提供了视图创建语句CREATE VIEW。其语。其语法格式如下:法格式如下:CREATE VIEW schema_name.view_name (column ,.n )WITH ,
11、.n AS select_statement ;WITH CHECK OPTION 9.1 视图视图组成视图的属性列名全部省略或全部指定,没有第3种选择。省略:视图属性列由子查询中SELECT目标列中的诸字段组成明确指定视图的所有列名:(1)某个SELECT目标列是集函数或列表达式(2)多表连接时选出了几个同名列作为视图的字段 (注:在SQL Server 2005中可省略)(3)需要在视图中为某个列启用新的更合适的名字【例例1】创建学生创建学生_课程课程_分数视图,包括计算机系的学生的学号、姓名,分数视图,包括计算机系的学生的学号、姓名,和他们选修的课程名、分数。和他们选修的课程名、分数。C
12、REATE VIEW stu_sc ASSELECT Student.sno,Cname,GradeFROM Student,SC,CourseWHERE student.sno=sc.sno and o=o and Sdept=CS【例例2】带带WITH CHECK OPTION的视图CREATE VIEW CS_studentASSELECT Student.sno,Sname,SageFROM StudentWHERE Sdept=CSWITH CHECK OPTION 9.1 视图视图WITH CHECK OPTION透过视图进行增删改操作时,不得破坏视图定义中的谓词条件(即子查询中的
13、条件表达式)带表达式的视图例3 定义一个反映学生出生年份的视图。CREATE VIEW BT_S(Sno,Sname,Sbirth)AS SELECT Sno,Sname,2000-Sage FROM Student设置一些派生属性列,也称为虚拟列-Sbirth 带表达式的视图必须明确定义组成视图的各个属性列名 建立含分组视图例4 将学生的学号及他的平均成绩定义为一个视图 假设SC表中“成绩”列Grade为数字型 CREAT VIEW S_G(Sno,Gavg)AS SELECT Sno,AVG(Grade)FROM SC GROUP BY Sno;9.1.4 查询视图查询视图视图创建完毕,就
14、可以如同查询基本表一样查询视图了。可以在视图创建完毕,就可以如同查询基本表一样查询视图了。可以在SQL Server Management Studio中选中要查询的视图并打开,浏览该视中选中要查询的视图并打开,浏览该视图查询的所有数据。也可以在查询窗口中执行图查询的所有数据。也可以在查询窗口中执行T-SQL语句查询视图。语句查询视图。【例例5】查询查询stu_sc视图,统计视图,统计“数据库数据库”课程的总分和平均分。课程的总分和平均分。SELECT SUM(Grade)总分总分,平均分平均分=AVG(Grade)FROM stu_scWHERE Cname=数据库数据库【例例6】在S_G视
15、图中查询平均成绩在80分以上的学生学号和平均成绩SELECT*FROM S_GWHERE Gavg=80;9.1 视图视图9.1.5 更新视图更新视图通过更新视图数据(包括添加、修改和删除)可以修改基本表数据。但通过更新视图数据(包括添加、修改和删除)可以修改基本表数据。但并不是所有的视图都可以更新,只有对满足可更新条件的视图才能进并不是所有的视图都可以更新,只有对满足可更新条件的视图才能进行更新。行更新。只要满足下列条件,即可通过视图修改基础基表的数据:只要满足下列条件,即可通过视图修改基础基表的数据:1)任何修改(包括任何修改(包括UPDATE、INSERT和和DELETE语句)都只能引用
16、一语句)都只能引用一个基表的列。更新不能涉及多个表。个基表的列。更新不能涉及多个表。2)视图中被修改的列必须直接引用表列中的基础数据。不能通过任何其视图中被修改的列必须直接引用表列中的基础数据。不能通过任何其他方式对这些列进行派生,如通过聚合函数、计算(如表达式计算)、他方式对这些列进行派生,如通过聚合函数、计算(如表达式计算)、集合运算等。集合运算等。3)被修改的列不受被修改的列不受GROUP BY、HAVING、DISTINCT或或TOP子句的影子句的影响。响。即使是可更新视图,也不能随意更新数据。如果视图所依赖的基本表有即使是可更新视图,也不能随意更新数据。如果视图所依赖的基本表有多个时
17、,不能向该视图添加数据,因为这将影响多个基本表。修改数据多个时,不能向该视图添加数据,因为这将影响多个基本表。修改数据时,若视图依赖于多个基本表,那么一次修改只能修改一个基本表中的时,若视图依赖于多个基本表,那么一次修改只能修改一个基本表中的数据。删除数据时,若视图依赖于多个基本表,那么不能通过视图删除数据。删除数据时,若视图依赖于多个基本表,那么不能通过视图删除数据。数据。9.1 视图视图更新视图(续)例例7 7 将信息系学生视图将信息系学生视图stu_scstu_sc中学号为中学号为9500195001的学生姓名改为的学生姓名改为“李永李永”。UPDATE stu_scSET Sname=
18、李永WHERE Sno=95001;更新视图(续)例8 向信息系学生视图CS_Student中插入一个新的学生记录:95029,赵新,20岁INSERTINTO CS_StudentVALUES(95029,赵新,20,CS);Sdept的值必为CS,为什么?更新视图(续)例:视图S_G为不可更新视图。对于如下更新语句:UPDATE S_GSET Gavg=90WHERE Sno=95001;9.1.6 修改视图定义修改视图定义修改视图定义,与修改基本表结构不一样。修改基本表结构修改视图定义,与修改基本表结构不一样。修改基本表结构是指重新定义列名、属性、约束等,而修改视图定义是指是指重新定义列
19、名、属性、约束等,而修改视图定义是指修改视图的指定列的列名、别名、表名、是否输出、顺序修改视图的指定列的列名、别名、表名、是否输出、顺序类型等属性。类型等属性。可以在可以在SQL Server Management Studio中选中要修改的中选中要修改的视图并修改,就能修改视图定义了。也可以在查询窗口中视图并修改,就能修改视图定义了。也可以在查询窗口中执行执行T-SQL语句修改视图定义。语句修改视图定义。T-SQL提供了视图创建语提供了视图创建语句句ALTER VIEW。其语法格式如下:。其语法格式如下:ALTER VIEW schema_name.view_name (column ,.n
20、 )WITH ,.n AS select_statement ;WITH CHECK OPTION 9.1 视图视图【例例9】修改修改【例例1】创建的创建的stu_sc视图。视图。ALTER VIEW stu_sc(sID,Sname,Cname,Grade)ASSELECT Student.sno,Sname,Cname,GradeFROM Student,SC,CourseWHERE student.sno=sc.sno and o=o and Sdept=CS 9.1 视图视图9.1.7 删除视图删除视图如果不需要视图,则可以将视图删除。可以在如果不需要视图,则可以将视图删除。可以在SQ
21、L Server Management Studio中选中要删除的视图并删除,就能中选中要删除的视图并删除,就能删除视图。也可以在查询窗口中执行删除视图。也可以在查询窗口中执行T-SQL语句删除视图。语句删除视图。T-SQL提供了视图删除语句提供了视图删除语句DROP VIEW。其语法格式如。其语法格式如下:下:DROP VIEW view_name【例例10】删除视图删除视图view_1。DROP VIEW view_1GO 9.1 视图视图含子查询的视图例11:视图GOOD_SC(修课成绩在平均成绩之上的元组)CREATE VIEW GOOD_SC AS SELECT Sno,Cno,Gr
22、ade FROM SC WHERE Grade (SELECT AVG(Grade)FROM SC);索引包含从表或视图中一个或多个列生成的键,以及映射到索引包含从表或视图中一个或多个列生成的键,以及映射到指定数据的存储位置的指针。通过创建设计良好的索引以支指定数据的存储位置的指针。通过创建设计良好的索引以支持查询,可以提高查询性能。对于包含持查询,可以提高查询性能。对于包含SELECT、UPDATE或或DELETE语句的各种查询,索引会很有用。语句的各种查询,索引会很有用。在数据库系统中建立索引主要有以下作用:在数据库系统中建立索引主要有以下作用:1)快速存取数据。快速存取数据。2)保证数据
23、的一致性。保证数据的一致性。3)实现表与表之间的参照完整性。实现表与表之间的参照完整性。4)在使用在使用GROUP BY、ORDER BY子句进行查询时,利用子句进行查询时,利用索引可以减少排序和分组的时间。索引可以减少排序和分组的时间。9.2 索引索引9.2.1 索引的分类索引的分类如果一个表没有创建索引,则数据行不按任何特定顺序存储,这种结构如果一个表没有创建索引,则数据行不按任何特定顺序存储,这种结构称为堆集。称为堆集。SQL Server 2005支持在表中任何列(包括计算列)上定义索引。索引支持在表中任何列(包括计算列)上定义索引。索引可以是惟一的,即索引列不会有两行记录相同,这样的
24、索引称为惟一可以是惟一的,即索引列不会有两行记录相同,这样的索引称为惟一索引。索引也可以是不惟一的。如果索引是根据单列创建的,这样的索引。索引也可以是不惟一的。如果索引是根据单列创建的,这样的索引称为单列索引。根据多列组合创建的索引称为复合索引。索引称为单列索引。根据多列组合创建的索引称为复合索引。按索引的组织方式的不同,可以将索引分为聚集索引和非聚集索引。按索引的组织方式的不同,可以将索引分为聚集索引和非聚集索引。1.聚集索引聚集索引根据数据行的键值在表或视图中排序和存储这些数据行。索引聚集索引根据数据行的键值在表或视图中排序和存储这些数据行。索引定义中包含聚集索引列。每个表只能有一个聚集索
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQL 数据库
限制150内