欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    SQL数据库9.ppt

    • 资源ID:68604768       资源大小:111KB        全文页数:44页
    • 资源格式: PPT        下载积分:16金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要16金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    SQL数据库9.ppt

    数据库的基本表是按照数据库设计人员的观点设计的,数据库的基本表是按照数据库设计人员的观点设计的,并不一定符合用户的需求。并不一定符合用户的需求。SQL Server 2005可以根据可以根据用户需求重新定义表的数据结构,这种数据结构就是视用户需求重新定义表的数据结构,这种数据结构就是视图。图。在数据库系统中,为了迅速地从庞大的数据库中找到所在数据库系统中,为了迅速地从庞大的数据库中找到所需要的数据,需要的数据,SQL Server 2005提供了类似书的目录作提供了类似书的目录作用的索引技术。通过对数据库中表设置索引,可以大大用的索引技术。通过对数据库中表设置索引,可以大大加快数据的检索速度。加快数据的检索速度。SQL Server 2005还提供了一种还提供了一种称为游标的机制,来处理数据。称为游标的机制,来处理数据。本章主要介绍本章主要介绍SQL Server 2005数据库系统视图的创建数据库系统视图的创建以及使用,索引类型及创建、使用,游标的创建以及使以及使用,索引类型及创建、使用,游标的创建以及使用。用。第9章 视图、索引和游标视图、索引和游标 9.1 视图视图9.2 索引索引9.3 游标游标第9章 视图、索引和游标视图、索引和游标 9.1.1 视图概述视图概述视图是从一个或多个表或视图中导出的表,其结构和数据是视图是从一个或多个表或视图中导出的表,其结构和数据是建立在对表的查询基础上的。视图不是真实存在的基础表建立在对表的查询基础上的。视图不是真实存在的基础表而是一张虚表,视图所对应的数据并不实际地以视图结构而是一张虚表,视图所对应的数据并不实际地以视图结构存储在数据库中,而是存储在视图所引用的表中。存储在数据库中,而是存储在视图所引用的表中。1.视图的优点视图的优点使用视图有很多优点,主要表现在:使用视图有很多优点,主要表现在:1)为用户集中数据,简化用户的数据查询和处理。使得分散为用户集中数据,简化用户的数据查询和处理。使得分散在多个表中的数据,通过视图定义在一起。在多个表中的数据,通过视图定义在一起。2)简化操作,屏蔽了数据库的复杂性。简化操作,屏蔽了数据库的复杂性。3)重新定制数据,使得数据便于共享。重新定制数据,使得数据便于共享。4)合并分割数据,有利于数据输出到应用程序中。合并分割数据,有利于数据输出到应用程序中。5)简化了用户权限的管理,增加了安全性。简化了用户权限的管理,增加了安全性。9.1 视图视图2.视图的使用范围视图的使用范围视图通常用来集中、简化和自定义每个用户对数据库的不同视图通常用来集中、简化和自定义每个用户对数据库的不同认识。通常在以下情况下使用视图:认识。通常在以下情况下使用视图:1)着重于特定数据。着重于特定数据。2)简化数据操作。简化数据操作。3)自定义数据。自定义数据。4)数据的导入与导出。数据的导入与导出。5)跨服务器组合分区数据库跨服务器组合分区数据库9.1 视图视图9.1.2 视图的类型视图的类型在在SQL Server 2005中,视图可以分为标准视图、索引视图中,视图可以分为标准视图、索引视图和分区视图。和分区视图。标准视图组合了一个或多个表中的数据,用户可以使用标准标准视图组合了一个或多个表中的数据,用户可以使用标准视图对数据库进行查询、修改、删除等基本操作。视图对数据库进行查询、修改、删除等基本操作。索引视图是被具体化了的视图,即它已经过计算并存储。可索引视图是被具体化了的视图,即它已经过计算并存储。可以为视图创建索引,即对视图创建一个惟一的聚集索引。以为视图创建索引,即对视图创建一个惟一的聚集索引。索引视图可以显著提高某些类型查询的性能。索引视图尤索引视图可以显著提高某些类型查询的性能。索引视图尤其适于聚合许多行的查询。但它们不太适于经常更新的基其适于聚合许多行的查询。但它们不太适于经常更新的基本数据集。本数据集。分区视图在一台或多台服务器间水平连接一组成员表中的分分区视图在一台或多台服务器间水平连接一组成员表中的分区数据。这样,数据看上去如同来自于一个表。联接同一区数据。这样,数据看上去如同来自于一个表。联接同一个个SQL Server实例中的成员表的视图是一个本地分区视实例中的成员表的视图是一个本地分区视图。图。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子句。子句。9.1 视图视图10)不能为视图定义全文索引定义。不能为视图定义全文索引定义。11)不能创建临时视图,也不能对临时表创建视图。不能创建临时视图,也不能对临时表创建视图。12)不能删除参与到使用不能删除参与到使用SCHEMABINDING子句创建的视子句创建的视图中的视图、表或函数,除非该视图已被删除或更改而不图中的视图、表或函数,除非该视图已被删除或更改而不再具有架构绑定。另外,如果对参与具有架构绑定的视图再具有架构绑定。另外,如果对参与具有架构绑定的视图的表执行的表执行ALTER TABLE语句,而这些语句又会影响该视语句,而这些语句又会影响该视图的定义,则这些语句将会失败。图的定义,则这些语句将会失败。13)下列情况下必须指定视图中每列的名称:下列情况下必须指定视图中每列的名称:视图中的任何列都是从算术表达式、内置函数或常量派生视图中的任何列都是从算术表达式、内置函数或常量派生而来。而来。视图中有两列或多列原应具有相同名称。视图中有两列或多列原应具有相同名称。希望为视图中的列指定一个与其源列不同的名称。希望为视图中的列指定一个与其源列不同的名称。9.1 视图视图在在SQL Server 2005中创建标准视图主要有两种方式:一种中创建标准视图主要有两种方式:一种方式是在方式是在SQL Server Management Studio中使用向导创中使用向导创建视图,另一种方式是通过在查询窗口中执行建视图,另一种方式是通过在查询窗口中执行T-SQL语句创语句创建视图。建视图。T-SQL提供了视图创建语句提供了视图创建语句CREATE VIEW。其语。其语法格式如下:法格式如下:CREATE VIEW schema_name.view_name (column ,.n )WITH ,.n AS select_statement ;WITH CHECK OPTION 9.1 视图视图组成视图的属性列名全部省略或全部指定,没有第3种选择。省略:视图属性列由子查询中SELECT目标列中的诸字段组成明确指定视图的所有列名:(1)某个SELECT目标列是集函数或列表达式(2)多表连接时选出了几个同名列作为视图的字段 (注:在SQL Server 2005中可省略)(3)需要在视图中为某个列启用新的更合适的名字【例例1】创建学生创建学生_课程课程_分数视图,包括计算机系的学生的学号、姓名,分数视图,包括计算机系的学生的学号、姓名,和他们选修的课程名、分数。和他们选修的课程名、分数。CREATE 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透过视图进行增删改操作时,不得破坏视图定义中的谓词条件(即子查询中的条件表达式)带表达式的视图例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 查询视图查询视图视图创建完毕,就可以如同查询基本表一样查询视图了。可以在视图创建完毕,就可以如同查询基本表一样查询视图了。可以在SQL Server Management Studio中选中要查询的视图并打开,浏览该视中选中要查询的视图并打开,浏览该视图查询的所有数据。也可以在查询窗口中执行图查询的所有数据。也可以在查询窗口中执行T-SQL语句查询视图。语句查询视图。【例例5】查询查询stu_sc视图,统计视图,统计“数据库数据库”课程的总分和平均分。课程的总分和平均分。SELECT SUM(Grade)总分总分,平均分平均分=AVG(Grade)FROM stu_scWHERE Cname=数据库数据库【例例6】在S_G视图中查询平均成绩在80分以上的学生学号和平均成绩SELECT*FROM S_GWHERE Gavg=80;9.1 视图视图9.1.5 更新视图更新视图通过更新视图数据(包括添加、修改和删除)可以修改基本表数据。但通过更新视图数据(包括添加、修改和删除)可以修改基本表数据。但并不是所有的视图都可以更新,只有对满足可更新条件的视图才能进并不是所有的视图都可以更新,只有对满足可更新条件的视图才能进行更新。行更新。只要满足下列条件,即可通过视图修改基础基表的数据:只要满足下列条件,即可通过视图修改基础基表的数据:1)任何修改(包括任何修改(包括UPDATE、INSERT和和DELETE语句)都只能引用一语句)都只能引用一个基表的列。更新不能涉及多个表。个基表的列。更新不能涉及多个表。2)视图中被修改的列必须直接引用表列中的基础数据。不能通过任何其视图中被修改的列必须直接引用表列中的基础数据。不能通过任何其他方式对这些列进行派生,如通过聚合函数、计算(如表达式计算)、他方式对这些列进行派生,如通过聚合函数、计算(如表达式计算)、集合运算等。集合运算等。3)被修改的列不受被修改的列不受GROUP BY、HAVING、DISTINCT或或TOP子句的影子句的影响。响。即使是可更新视图,也不能随意更新数据。如果视图所依赖的基本表有即使是可更新视图,也不能随意更新数据。如果视图所依赖的基本表有多个时,不能向该视图添加数据,因为这将影响多个基本表。修改数据多个时,不能向该视图添加数据,因为这将影响多个基本表。修改数据时,若视图依赖于多个基本表,那么一次修改只能修改一个基本表中的时,若视图依赖于多个基本表,那么一次修改只能修改一个基本表中的数据。删除数据时,若视图依赖于多个基本表,那么不能通过视图删除数据。删除数据时,若视图依赖于多个基本表,那么不能通过视图删除数据。数据。9.1 视图视图更新视图(续)例例7 7 将信息系学生视图将信息系学生视图stu_scstu_sc中学号为中学号为9500195001的学生姓名改为的学生姓名改为“李永李永”。UPDATE stu_scSET Sname=李永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 修改视图定义修改视图定义修改视图定义,与修改基本表结构不一样。修改基本表结构修改视图定义,与修改基本表结构不一样。修改基本表结构是指重新定义列名、属性、约束等,而修改视图定义是指是指重新定义列名、属性、约束等,而修改视图定义是指修改视图的指定列的列名、别名、表名、是否输出、顺序修改视图的指定列的列名、别名、表名、是否输出、顺序类型等属性。类型等属性。可以在可以在SQL Server Management Studio中选中要修改的中选中要修改的视图并修改,就能修改视图定义了。也可以在查询窗口中视图并修改,就能修改视图定义了。也可以在查询窗口中执行执行T-SQL语句修改视图定义。语句修改视图定义。T-SQL提供了视图创建语提供了视图创建语句句ALTER VIEW。其语法格式如下:。其语法格式如下:ALTER VIEW schema_name.view_name (column ,.n )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 删除视图删除视图如果不需要视图,则可以将视图删除。可以在如果不需要视图,则可以将视图删除。可以在SQL 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,Grade FROM SC WHERE Grade (SELECT AVG(Grade)FROM SC);索引包含从表或视图中一个或多个列生成的键,以及映射到索引包含从表或视图中一个或多个列生成的键,以及映射到指定数据的存储位置的指针。通过创建设计良好的索引以支指定数据的存储位置的指针。通过创建设计良好的索引以支持查询,可以提高查询性能。对于包含持查询,可以提高查询性能。对于包含SELECT、UPDATE或或DELETE语句的各种查询,索引会很有用。语句的各种查询,索引会很有用。在数据库系统中建立索引主要有以下作用:在数据库系统中建立索引主要有以下作用:1)快速存取数据。快速存取数据。2)保证数据的一致性。保证数据的一致性。3)实现表与表之间的参照完整性。实现表与表之间的参照完整性。4)在使用在使用GROUP BY、ORDER BY子句进行查询时,利用子句进行查询时,利用索引可以减少排序和分组的时间。索引可以减少排序和分组的时间。9.2 索引索引9.2.1 索引的分类索引的分类如果一个表没有创建索引,则数据行不按任何特定顺序存储,这种结构如果一个表没有创建索引,则数据行不按任何特定顺序存储,这种结构称为堆集。称为堆集。SQL Server 2005支持在表中任何列(包括计算列)上定义索引。索引支持在表中任何列(包括计算列)上定义索引。索引可以是惟一的,即索引列不会有两行记录相同,这样的索引称为惟一可以是惟一的,即索引列不会有两行记录相同,这样的索引称为惟一索引。索引也可以是不惟一的。如果索引是根据单列创建的,这样的索引。索引也可以是不惟一的。如果索引是根据单列创建的,这样的索引称为单列索引。根据多列组合创建的索引称为复合索引。索引称为单列索引。根据多列组合创建的索引称为复合索引。按索引的组织方式的不同,可以将索引分为聚集索引和非聚集索引。按索引的组织方式的不同,可以将索引分为聚集索引和非聚集索引。1.聚集索引聚集索引根据数据行的键值在表或视图中排序和存储这些数据行。索引聚集索引根据数据行的键值在表或视图中排序和存储这些数据行。索引定义中包含聚集索引列。每个表只能有一个聚集索引,因为数据行本定义中包含聚集索引列。每个表只能有一个聚集索引,因为数据行本身只能按一个顺序排序。身只能按一个顺序排序。2.非聚集索引非聚集索引具有独立于数据行的结构。非聚集索引包含非聚集索引键值,非聚集索引具有独立于数据行的结构。非聚集索引包含非聚集索引键值,并且每个键值项都有指向包含该键值的数据行的指针。并且每个键值项都有指向包含该键值的数据行的指针。聚集索引和非聚集索引都可以是惟一的。聚集索引和非聚集索引都可以是惟一的。9.2 索引索引9.2.2 创建索引创建索引创建索引时,首先必须考虑以下设计准则:创建索引时,首先必须考虑以下设计准则:1.设计索引时应考虑的准则设计索引时应考虑的准则(1)创建索引之前应考虑的准则创建索引之前应考虑的准则在创建索引之前应考虑如下准则:在创建索引之前应考虑如下准则:1)了解数据库本身的特征。了解数据库本身的特征。2)了解最常用的查询的特征。了解最常用的查询的特征。3)了解查询中使用的列的特征。了解查询中使用的列的特征。4)确定哪些索引选项可在创建或维护索引时提高性能。确定哪些索引选项可在创建或维护索引时提高性能。5)确定索引的最佳存储位置。确定索引的最佳存储位置。9.2 索引索引(2)设计索引应考虑的数据库准则设计索引应考虑的数据库准则1)一个表如果建有大量索引,会影响一个表如果建有大量索引,会影响INSERT、UPDATE和和DELETE语句的性能。语句的性能。2)避免对经常更新的表进行过多索引,索引列尽可能少。避免对经常更新的表进行过多索引,索引列尽可能少。3)使用多个索引可以提高更新少而数据量大的查询的性能。使用多个索引可以提高更新少而数据量大的查询的性能。4)对小表进行索引可能不会产生优化效果。对小表进行索引可能不会产生优化效果。5)视图包含聚集函数、连接或聚集函数和连接的组合时,视视图包含聚集函数、连接或聚集函数和连接的组合时,视图的索引可以显著提升性能。图的索引可以显著提升性能。9.2 索引索引在在SQL Server 2005中中创创建建索索引引主主要要有有两两种种方方式式:一一种种方方式式是是在在SQL Server Management Studio中中使使用用向向导导创创建建索索引引,另另一一种种方方式式是是通通过过在在查查询询窗窗口口中中执执行行T-SQL语语句句创创建索引。建索引。T-SQL提供了索引创建语句提供了索引创建语句CREATE INDEX。其语法格式如。其语法格式如下:下:CREATE UNIQUE CLUSTERED|NONCLUSTERED INDEX index_name ON (column ASC|DESC ,.n )INCLUDE(column_name ,.n )WITH(,.n )ON partition_scheme_name(column_name)|filegroup_name|default9.2 索引索引例12 根据学生表的系创建索引CREATE INDEX index_stu_sdept on student(sdept)例13 根据选课表的学号、课程号降序创建索引CREATE INDEX index_SC on SC(sno,cno desc)9.2.3 创建索引视图创建索引视图如果在查询中频繁地引用视图,可通过对视图创建惟一聚集索引来提高如果在查询中频繁地引用视图,可通过对视图创建惟一聚集索引来提高性能。性能。【例例14】根据视图根据视图CS_student1,创建索引视图。,创建索引视图。创建视图:创建视图:CREATE VIEW CS_student1WITH SCHEMABINDINGASSELECT Sno,Sname,Sage,SdeptFROM dbo.StudentWHERE (Sdept=CS)创建索引:创建索引:CREATE UNIQUE CLUSTERED INDEX index_CS_student1ON CS_student1(sdept,sage)GO9.2 索引索引9.2.4 删除索引删除索引如果不需要索引,则可以将索引删除。在如果不需要索引,则可以将索引删除。在SQL Server 2005中提供了两种删除方式:一种方式是在中提供了两种删除方式:一种方式是在SQL Server Management Studio中删除索引,另一种方式是通过执中删除索引,另一种方式是通过执行行T-SQL语句删除索引。语句删除索引。T-SQL提供了索引删除语句提供了索引删除语句DROP INDEX。其语法格式如下:。其语法格式如下:DROP INDEX table_name.index_name【例例15】删除删除【例例12】创建的索引创建的索引index_stu_sdept。DROP INDEX Student.index_stu_sdeptGO9.2 索引索引在在SQL Server 2005中,中,SELECT查询操作会对整个行集起查询操作会对整个行集起作用。由作用。由SELECT语句返回的行集包括满足该语句的语句返回的行集包括满足该语句的WHERE子句中条件的所有行。这种由语句返回的完整行集称为结果子句中条件的所有行。这种由语句返回的完整行集称为结果集。应用程序,特别是交互式联机应用程序,并不总能将整集。应用程序,特别是交互式联机应用程序,并不总能将整个结果集作为一个单元来有效地处理。这些应用程序需要一个结果集作为一个单元来有效地处理。这些应用程序需要一种机制以便每次处理一行或一部分行。游标就是提供这种机种机制以便每次处理一行或一部分行。游标就是提供这种机制的对结果集的一种扩展。制的对结果集的一种扩展。9.3 游标游标9.3.1 游标概述游标概述SQL Server 2005通过游标提供了对一个结果集进行逐行处理的能力。通过游标提供了对一个结果集进行逐行处理的能力。游标也可以看作是一个表中的记录指针,该指针与某个查询结果相联系。游标也可以看作是一个表中的记录指针,该指针与某个查询结果相联系。在某一时刻,该指针只指向一条记录,即游标是通过移动指向记录的在某一时刻,该指针只指向一条记录,即游标是通过移动指向记录的指针来处理数据的。当用户在指针来处理数据的。当用户在SQL Server Management Studio中中浏览记录时,总有一条记录的前面有一个黑色的三角标识,该标识就浏览记录时,总有一条记录的前面有一个黑色的三角标识,该标识就好像是一个记录指针。好像是一个记录指针。游标通过以下方式来扩展结果处理:游标通过以下方式来扩展结果处理:1)允许定位在结果集的特定行。允许定位在结果集的特定行。2)从结果集的当前位置检索一行或一部分行。从结果集的当前位置检索一行或一部分行。3)支持对结果集中当前位置的行进行数据修改。支持对结果集中当前位置的行进行数据修改。4)为由其他用户对显示在结果集中的数据库数据所做的更改提供不同级为由其他用户对显示在结果集中的数据库数据所做的更改提供不同级别的可见性支持。别的可见性支持。5)提供脚本、存储过程和触发器中用于访问结果集中的数据的提供脚本、存储过程和触发器中用于访问结果集中的数据的T-SQL语语句。句。9.3 游标游标9.3.2 游标的类型游标的类型在在SQL Server 2005中,根据游标的用途、使用方式等不同,可以将游标分为多中,根据游标的用途、使用方式等不同,可以将游标分为多种类型。种类型。1.根据用途分类根据游标用途的不同,根据游标用途的不同,SQL Server 2005将游标分为三种:将游标分为三种:(1)T-SQL游标基于基于DECLARE CURSOR语法,主要用于语法,主要用于T-SQL脚本、存储过程和触发器。脚本、存储过程和触发器。T-SQL游标在服务器上实现并由从客户端发送到服务器的游标在服务器上实现并由从客户端发送到服务器的T-SQL语句管理。它们语句管理。它们还可能包含在批处理、存储过程或触发器中。还可能包含在批处理、存储过程或触发器中。(2)应用程序编程接口(API)服务器游标支持支持OLE DB和和ODBC中的中的API游标函数。游标函数。API服务器游标在服务器上实现。每次服务器游标在服务器上实现。每次客户端应用程序调用客户端应用程序调用API游标函数时,游标函数时,SQL Native Client OLE DB访问接口访问接口或或ODBC驱动程序将把请求传输到服务器,以便对驱动程序将把请求传输到服务器,以便对API服务器游标进行操作。服务器游标进行操作。(3)客户端游标由由SQL Native Client ODBC驱动程序和实现驱动程序和实现ADO API的的DLL在内部实现。客户在内部实现。客户端游标通过在客户端高速缓存所有结果集行来实现。每次客户端应用程序调用端游标通过在客户端高速缓存所有结果集行来实现。每次客户端应用程序调用API游标函数时,游标函数时,SQL Native Client ODBC 驱动程序或驱动程序或ADO DLL就对客户就对客户端上高速缓存的结果集行执行游标操作。端上高速缓存的结果集行执行游标操作。由于由于T-SQL游标和游标和API服务器游标都在服务器上实现,所以它们统称为服务器游服务器游标都在服务器上实现,所以它们统称为服务器游标。标。9.3 游标游标2.根据处理特性分类根据处理特性分类根据根据T-SQL服务器游标的处理特性,服务器游标的处理特性,SQL Server 2005将游标分为四种:将游标分为四种:(1)静态游标静态游标的完整结果集在打开游标时建立在静态游标的完整结果集在打开游标时建立在tempdb中。静态游标总是按照打开中。静态游标总是按照打开游标时的原样显示结果集。游标时的原样显示结果集。SQL Server 2005静态游标始终是只读的。静态游标始终是只读的。(2)动态游标动态游标与静态游标相对。当滚动游标时,动态游标反映结果集中所做的所有更动态游标与静态游标相对。当滚动游标时,动态游标反映结果集中所做的所有更改。结果集中的行数据值、顺序和成员在每次提取时都会改变。所有用户做的改。结果集中的行数据值、顺序和成员在每次提取时都会改变。所有用户做的全部全部UPDATE、INSERT和和DELETE语句均通过游标可见。语句均通过游标可见。在在SQL Server 2005中,动态游标工作表更新始终可以进行。中,动态游标工作表更新始终可以进行。9.3 游标游标(3)只进游标只进游标不支持滚动,它只支持游标从头到尾顺序提取。行只在从数据库中提取只进游标不支持滚动,它只支持游标从头到尾顺序提取。行只在从数据库中提取出来后才能检索。对所有由当前用户发出或由其他用户提交、并影响结果集中出来后才能检索。对所有由当前用户发出或由其他用户提交、并影响结果集中的行的的行的INSERT、UPDATE和和DELETE语句,其效果在这些行从游标中提取时语句,其效果在这些行从游标中提取时是可见的。是可见的。SQL Server 2005将只进和滚动都作为能应用于静态游标、键集将只进和滚动都作为能应用于静态游标、键集驱动游标和动态游标的选项。驱动游标和动态游标的选项。T-SQL游标支持只进静态游标、键集驱动游标和游标支持只进静态游标、键集驱动游标和动态游标。动态游标。(4)由键集驱动游标打开由键集驱动的游标时,该游标中各行的成员身份和顺序是固定的。打开由键集驱动的游标时,该游标中各行的成员身份和顺序是固定的。当用户滚动游标时,对非键集列中的数据值所做的更改(由游标所有者做出或由当用户滚动游标时,对非键集列中的数据值所做的更改(由游标所有者做出或由其他用户提交)是可见的。在游标外对数据库所做的插入在游标内不可见,除其他用户提交)是可见的。在游标外对数据库所做的插入在游标内不可见,除非关闭并重新打开游标。非关闭并重新打开游标。9.3 游标游标3.根据移动方式分类根据移动方式分类根据根据T-SQL服务器游标在结果集中移动方式,服务器游标在结果集中移动方式,SQL Server 2005将游标分为两种:将游标分为两种:(1)滚动游标滚动游标在游标结果集中,滚动游标可以前后移动。在游标结果集中,滚动游标可以前后移动。(2)前向游标前向游标在游标结果集中,前向游标只能向前移动。在游标结果集中,前向游标只能向前移动。根据根据T-SQL服务器游标结果集是否允许修改,服务器游标结果集是否允许修改,SQL Server 2005将游标分为两种:将游标分为两种:(1)只读游标只读游标只读游标禁止修改游标结果集中的数据。只读游标禁止修改游标结果集中的数据。(2)只写游标只写游标只写游标可以修改游标结果集中的数据,但分为部分可写和只写游标可以修改游标结果集中的数据,但分为部分可写和全部可写。部分可写表示只能修改数据行指定的列,而全全部可写。部分可写表示只能修改数据行指定的列,而全部可写表示可以修改数据行所有的列。部可写表示可以修改数据行所有的列。9.3 游标游标9.3.3 声明游标声明游标声明游标是指利用声明游标是指利用SELECT查询语句创建游标的结构,指明查询语句创建游标的结构,指明游标的结果集中包括哪些数据。声明游标有两种方式:标游标的结果集中包括哪些数据。声明游标有两种方式:标准方式和准方式和T-SQL扩展方式。扩展方式。标准方式提供了声明游标语句标准方式提供了声明游标语句DECLARE CURSOR。其语法。其语法格式如下:格式如下:DECLARE cursor_name INSENSITIVE SCROLL CURSOR FOR select_statement FOR READ ONLY|UPDATE OF column_name ,.n 9.3 游标游标T-SQL扩展方式也提供了声明游标语句扩展方式也提供了声明游标语句DECLARE CURSOR。其语法格式如下:其语法格式如下:DECLARE cursor_name CURSOR LOCAL|GLOBAL FORWORD_only|SCROLL STATIC|KEYSET|DYNAMIC|FAST_FORWARD READ_ONLY|SCROLL_LOCKS|OPTIMISTIC TYPE_WARNING FOR select_list FOR UPDATE OF column_name,n 9.3 游标游标【例例16】利用标准方式声明一个游标。利用标准方式声明一个游标。DECLARE 学生学生 CURSORFORSELECT sno,sname,ssex,sageFROM studentWHERE sdept=ISFOR READ ONLY【例例17】利用利用T-SQL扩展方式声明一个游标。扩展方式声明一个游标。DECLARE 学生学生1 CURSORDYNAMICFORSELECT sno,sname,ssex,sageFROM studentWHERE sdept=ISFOR UPDATE OF sname9.3 游标游标9.3.4 打开游标声明了游标,还必须打开才能使用。声明了游标,还必须打开才能使用。T-SQL提供了打开游标提供了打开游标语句语句OPEN。其语法格式如下:。其语法格式如下:OPEN GLOBAL cursor_name【例例16】打开声明的学生游标。打开声明的学生游标。OPEN 学生学生GO9.3 游标游标9.3.5 读取游标读取游标打开游标后,就可以从结果集中提取数据了。打开游标后,就可以从结果集中提取数据了。T-SQL提供了提供了读取游标语句读取游标语句FETCH。其语法格式如下:。其语法格式如下:FETCH NEXT|PRIOR|FIRST|LAST|ABSOLUTE n|nvar|RELATIVE n|nvar FROM GLOBAL cursor_name|cursor_variable_name INTO variable_name ,.n 9.3 游标游标9.3.6 关闭游标关闭游标如果一个已打开游标暂时不用,就可以关闭。如果一个已打开游标暂时不用,就可以关闭。T-SQL提供了提供了关闭游标语句关闭游标语句CLOSE。其语法格式如下:。其语法格式如下:CLOSE curso _name【例例】关闭学生游标关闭学生游标CLOSE 学生学生 9.3 游标游标9.3.7 删除游标删除游标如果一个游标不需要,就可以删除。如果一个游标不需要,就可以删除。T-SQL提供了删除游标提供了删除游标语句语句DEALLOCATE。其语法格式如下:。其语法格式如下:DEALLOCATE curso _name【例例】删除学生游标。删除学生游标。DEALLOCATE学生学生9.3 游标游标【例例18】完整举例。完整举例。DECLARE 学生学生CURSORFORSELECT sno,sname-,ssex,sageFROM studentWHERE sdept=ISFOR READ ONLYOPEN 学生学生declare vSno char(25),vSname char(25)fetch next from 学生学生into vSno,vSnameWhile(fetch_status=0)begin PRINT 学生名学生名 =+vSname;PRINT 学生学号学生学号=+vSno fetch next from 学生学生into vSno,vSname endclose 学生学生deallocate 学生学生9.3 游标游标

    注意事项

    本文(SQL数据库9.ppt)为本站会员(s****8)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开