数据库技术与应用开发教程(SQL Server 2008版) 教学课件 ppt 作者 刘亚姝 刘小松 乔俊玲 第8章 游标、事务和锁

上传人:E**** 文档编号:89409102 上传时间:2019-05-24 格式:PPT 页数:35 大小:682.50KB
返回 下载 相关 举报
数据库技术与应用开发教程(SQL Server 2008版)  教学课件 ppt 作者 刘亚姝 刘小松 乔俊玲 第8章 游标、事务和锁_第1页
第1页 / 共35页
数据库技术与应用开发教程(SQL Server 2008版)  教学课件 ppt 作者 刘亚姝 刘小松 乔俊玲 第8章 游标、事务和锁_第2页
第2页 / 共35页
数据库技术与应用开发教程(SQL Server 2008版)  教学课件 ppt 作者 刘亚姝 刘小松 乔俊玲 第8章 游标、事务和锁_第3页
第3页 / 共35页
数据库技术与应用开发教程(SQL Server 2008版)  教学课件 ppt 作者 刘亚姝 刘小松 乔俊玲 第8章 游标、事务和锁_第4页
第4页 / 共35页
数据库技术与应用开发教程(SQL Server 2008版)  教学课件 ppt 作者 刘亚姝 刘小松 乔俊玲 第8章 游标、事务和锁_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《数据库技术与应用开发教程(SQL Server 2008版) 教学课件 ppt 作者 刘亚姝 刘小松 乔俊玲 第8章 游标、事务和锁》由会员分享,可在线阅读,更多相关《数据库技术与应用开发教程(SQL Server 2008版) 教学课件 ppt 作者 刘亚姝 刘小松 乔俊玲 第8章 游标、事务和锁(35页珍藏版)》请在金锄头文库上搜索。

1、第8章 游标、事务和锁 本章要点: 游标的使用 事务的分类 事务的使用 死锁的处理,8.1 游标,8.1.1 游标概述 游标是一个在结果集中可以移动的指针,它可以指向结果集中的任意位置,允许用户对指定位置的数据进行处理。 游标向数据库发送查询,得到一个记录集,但是游标一次只返回一个记录行,而不是大批返回行。 游标可以在记录集上滚动,可以指向记录集中的任何一个记录行。在游标转移到下一个记录之前,可以在当前的记录行上执行所需的外部操作。 游标主要用在T-SQL批处理、存储过程以及触发器当中。,8.1 游标,8.1.1 游标概述 SQL Server 2008支持三种游标实现,这三种游标分别为: 1

2、T-SQL游标 基于DECLARE CURSOR语法,主要用在T-SQ L脚本、存储过程和触发器中。 2.应用编程接口(API)服务器游标 支持OLE DB和ODBC中的API函数。API服务器游标在服务器上实现。当客户端应用程序调用API游标函数时,相应的请求被传送到服务器,以便对API服务器游标进行操作。 3.客户端游标 由SQL Server ODBC驱动程序、实现ADO API的DDL在内部实现。客户端游标通过客户端高速缓存所有结果集来实现。每次客户端应用程序调用API游标函数时,实际是对高速缓存在客户端中的结果集执行操作。,8.1 游标,8.1.2 游标的类型 1只进游标(FORWA

3、RD ONLY) 只进游标不支持滚动,它只支持游标从头到尾顺序提取。对所有由当前用户或其他用户提交并影响结果集中行的INSERT、UPDATE、DELETE语句。 2.静态游标(STATIC) 静态游标的完整结果集在游标打开时建立在tempdb系统数据库中。静态游标总是按照游标打开时的原样显示结果集。任何对该结果集的行产生影响的更改,对该游标都是不可见的。,8.1 游标,8.1.2 游标的类型 3. 键集驱动游标(KEYSET) 打开游标时,键集驱动游标中的行顺序是固定的。键集驱动游标由一列被称为键集的唯一标识符控制。键集是游标打开时来自结果集中所有行的一系列键值,键集在打开时建立在tempd

4、b数据库中。对非键集列所作的更改,在用户滚动游标时是可见的。 4. 动态游标(DYNAMIC) 动态游标与静态游标相对。当滚动游标时,动态游标反映结果集中所做的所有更改。结果集中的行数据值、顺序和成员在每次提取时都会改变。所有用户做的全部UPDATE、lNSERT和DELETE语句均通过游标可见。,8.1 游标,8.1.2 游标的类型 游标还具有以下几种属性: 1.只读游标:游标内数据不能修改,即不能通过游标修改基本表数据。静态游标属于只读游标。 2.可修改游标:游标内数据可以修改,即可以修改游标当前数据,其修改结果会影响到基本表。 3.滚动游标:相对于只进游标,滚动游标可以前、后滚动,可使用

5、所有的提取选项(FIRST、LAST、PRIOR、NEXT、RELATIVE和ABSOLUTE)。 4.快速只进游标:快速只进游标是一种优化的只进游标,它提取的行的数据总是最新的,行在被提取之前所做的修改可以反映出来,行提取之后的修改不可见。,8.1 游标,8.1.3 游标的使用 游标的操作由五个部分组成,这五个关键的部分符合下面的顺序: 1声明游标DECLARE 2打开游标OPEN 3从游标中提取数据FETCH 4关闭游标CLOSE 5. 当不再需要游标时释放游标DEALLOCATE,8.1 游标,8.1.3 游标的使用 1.声明游标 在使用之前需要预先定义,也就是声明游标。游标定义通过DE

6、CLARE CURSOR语句来实现。其语法格式如下: DECLARE cursor_name CURSOR LOCAL | GLOBAL FORWARD_ONLY | SCROLL STATIC | KEYSET | DYNAMIC | FAST_FORWARD READ_ONLY | SCROLL_LOCKS | OPTIMISTIC TYPE_WARNING FOR select_statement FOR UPDATE OF column_name ,.n ,8.1 游标,8.1.3 游标的使用 1.声明游标 举例 声明一个名为“cursor_student”的游标来查询女学生的信息 U

7、SE Student DECLARE cursor_student SCROLL CURSOR /*声明支持所有提取操 作的游标*/ FOR /*游标返回结果集的SELECT语句*/ SELECT 学号,姓名,性别,出生日期 FROM StudentInfo WHERE 性别 =0 GO,8.1 游标,8.1.3 游标的使用 2.打开游标 声明一个游标后,游标中并没有任何数据,因此无法使用,只有将游标打开以后才可以使用该游标。打开游标是执行与其相关的一段SQL语句,打开游标使用OPEN语句,其语法格式为: OPEN GLOBAL cursor_name | cursor_variable_na

8、me 可以通过检查ERROR此全局变量值来判断cursor是否打开成功,如果值为0表示打开成功。当cursor打开成功后,可以用CURSOR_ROWS全局变量检查cursor内的数据条数(行数)。,8.1 游标,8.1.3 游标的使用 2.打开游标 举例 定义游标,然后打开游标,测试游标内数据行数 USE Student DECLARE cursor_student CURSOR /*声明游标*/ LOCAL SCROLL SCROLL_LOCKS /*定义游标的属性和作用域 */ FOR SELECT 学号,姓名,性别,出生日期 FROM StudentInfo WHERE 性别 =0 OP

9、EN cursor_student /*打开游标*/ SELECT 游标内数据行数=CURSOR_ROWS /*查询游标内数据条 数*/ GO,8.1 游标,8.1.3 游标的使用 3.从游标中取值 游标打开后,可以从中提取记录。在从游标中取值的过程中,可以在结果集的每一行上来回移动和处理。结果集中的数据可以提取到局部变量中。FETCH语句用于提取游标中的记录。其语法格式为: FETCH NEXT | PRIOR | FIRST | LAST | ABSOLUTE n | nvar | RELATIVE n | nvar FROM GLOBAL cursor_name | cursor_var

10、iable_name INTO variable_name ,.n ,8.1 游标,8.1.3 游标的使用 3.从游标中取值 举例 从游标中循环提取数据并使用PRINT语句将其显示 USE Student DECLARE cursor_student CURSOR /*声明游标*/ LOCAL SCROLL SCROLL_LOCKS /*定义游标属性*/ FOR SELECT 学号,姓名,出生日期 FROM StudentInfo WHERE 性别=0 OPEN cursor_student /*打开游标*/ DECLARE name char(30),date char(30),id cha

11、r(30) FETCH NEXT FROM cursor_student INTO id,name,date /*提取游标中 的记录*/ WHILE FETCH_STATUS =0 /*使用WHILE循环*/ BEGIN PRINT id+name+date /*显示记录*/ FETCH NEXT FROM cursor_student INTO id,name,date/*提取游标中 的记录*/ END GO,8.1 游标,8.1.3 游标的使用 4.使用游标修改和删除数据 通常情况下,用游标来从基础表中查询数据,以实现对数据的行处理,但在某些情况下,也常需要修改游标中的数据,即定位更新或删

12、除游标所包含的数据。当改变游标中的数据时,这种变化会自动地影响到游标的基础表。使用游标更新数据需要使用UPDATE语句,其语法格式为: UPDATE table_name SET WHERE CURRENT OF cursor_name,8.1 游标,8.1.3 游标的使用 4.使用游标修改和删除数据 举例 修改游标内的数据 USE Student DECLARE cursor_update CURSOR /*声明游标*/ GLOBAL SCROLL SCROLL_LOCKS /*定义游标属性*/ FOR SELECT 学号,姓名,性别,出生日期,总学分 FROM StudentInfo FO

13、R UPDATE OF 总学分 /*指定修改总学分列数据*/ OPEN cursor_update /*打开游标*/ FETCH LAST FROM cursor_update /*提取游标中的最后一条记录*/ /*根据游标修改基本表中数据列*/ UPDATE StudentInfo SET 总学分=100 WHERE CURRENT OF cursor_update GO,8.1 游标,8.1.3 游标的使用 4.使用游标修改和删除数据 使用游标删除数据需要使用DELETE语句,其语法格式为: DELETE FROM table_name WHERE CURRENT OF cursor_na

14、me 举例 删除“cursor_update”游标内的数据 OPEN cursor_update /*打开游标*/ FETCH FIRST FROM cursor_update /*提取游标中的第一条记录*/ /*根据游标删除基本表中数据列*/ DELETE FROM StudentInfo WHERE CURRENT OF cursor_update GO,8.1 游标,8.1.3 游标的使用 5.关闭和释放游标 在处理完游标中的数据之后,必须关闭游标来释放数据结果集和定位于数据上的锁。所以,在关闭游标后,禁止提取游标数据或通过游标进行定位修改和删除操作。但关闭游标后并不释放游标占用的数据结

15、构。可以使用CLOSE语句关闭游标,其语法格式如下: CLOSE GLOBAL cursor_name | cursor_variable_name 举例 关闭“cursor_update”游标 CLOSE cursor_update,8.1 游标,8.1.3 游标的使用 5.关闭和释放游标 由于关闭游标时并没有删除游标,因此,它仍然占用着系统资源。如果一个游标确定不再使用,可以使用DEALLOCATE命令释放游标所占用的资源,此时,游标的名字可以被再次使用。DEALLOCATE语句的语法格式为: DEALLOCATE GLOBAL cursor_name | cursor_variable_

16、name 举例 在使用完游标后,释放“cursor_update”游标 CLOSE cursor_update DEALLOCATE cursor_update,8.2 事务,8.2.1 事务的基本概念 事务是SQL Server中的单个逻辑工作单元,一个事务内的所有语句被作为一个整体执行。在事务执行过程中,如果遇到错误,则可以回滚事务,取消该事务所做的全部改变或部分改变,从而保证数据库的一致性和可恢复性。也就是说,一个事务要么其中的语句全部正确执行,要么全部语句不起作用。,8.2 事务,8.2.1 事务的基本概念 1.并发控制 在多用户系统中,允许多个用户和事务同时访问同一个数据库中相同的数据。为了避免同时发生的事务彼此间的相互干涉

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号