第讲事务与游标编程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第讲事务与游标编程
问题
在银行等重要交易中,要使一
组SQL语句同时执行或撤消, 如何做?

要对查询结果进行一行行的操

作,如何做到?
嵌套事务只有在提交了最外层
的事务后,数据才执行永久修


务 的 嵌 套
嵌套事务时,ROLLBACK语句 只能将所有内层事务回滚到最 外层的BEGIN TRANSACTION 语句
据项Y,则Trans1等待Trans2释放
Y上的锁,Trans2等待Trans1释放 X上的锁。因此,Trans1和Trans2
都无限地等待对方打开锁住的数
据项,则产生死锁。
【死锁示例】
死 说明: SQL Server能自动发现

并解除死锁

续 避免死锁的措施:P.237

游 标
以前:使用SELECT语句对表格进行查询, 返回的结果集包括所有满足条件的行。

1. 在结果集中定位特定行
2. 从结果集的当前位置检索行
3. 支持对结果集中当前位置的行 进行数据处理(修改/删除)
声明游标
使 用
打开游标
处理数据(读取/修改/删除)— —可以和其他T-SQL语句配合灵

活使用
标 关闭游标(与打开游标配对)
的 删除游标(与声明游标配对,此

时释放分配给游标的所有资源)

关闭游标
CLOSE cursor_name
删除游标
DEALLOCATION cursor_name
1. 声明一个名为CrsStudent的游 标,使其与“00电子商务班” 的所有学生信息(学号、姓
名)相关联,并逐行显示前

三条学生信息

1
如 使用@@fetch_status:

该全局变量/配置函数返回被最
求course表中某系(用户给定
系代码)所开课程的最大报名
人数,并把课程名称和最大报

名人数作为输出变量返回给用

户。
3
事务——掌握
锁——了解
重点:

掌握事务和游标的使用步骤、方法



利用封锁技术可以有效地保 证数据的一致性
封锁粒度:可以锁定在行、
列、表、数据库等不同的单

元上
锁 SQL Server具有自动和强制封
锁的功能
锁模式:
1. 共享锁(Share Lock)
2. 排他锁(Exclusive Lock)
锁 模
3. 更新锁(Update Lock)
各种锁模式的兼容性:

【问题】游标基本使用的例子
声明游标
DECLARE cursor_name CURSOR
[FORWORD_ONLY|SCROLL]

FOR select_statements
关 打开游标

OPEN cursor_name

使用游标

FETCH [NEXT|PRIOR|FIRST|LAST] FROM cursor Into @variable_name


思考:如果要求每次只显示表格(例如
上面的Course表)中的一行,该如何处
理?——这在将T-SQL嵌入到其他高级
语言(如C、VC、Delphi等)的编程中
经常用到。
可以将游标看作一种特殊的 指针,它可以指向与它相关
联的结果处 理。
标 概
游标提供了对一个结果集进 行逐行处理的能力:

共享锁 更新锁 排他锁
共享锁 YES
YES
NO
更新锁 YES
NO
NO
排他锁 NO
NO
NO
当两个事务trans1和trans2在下 列的状态时,将产生死锁:
1. Trans1:存取数据项X和Y
2. Trans2:存取数据项Y和X

【说明】如果事务Trans1封锁了

数据项X,事务Trans2封锁了数

后FETCH语句执行的游标的状态,

返回类型为int:
整 个
1. 0:FETCH语句成功
2. -1:FETCH语句失败或此行不在结果 集中

3. -2:被提取的行不存在



使用游标遍历Course表,输出 报名人数最多的课程的信息 (课程编码、课程名称、报名 人数)
练 习 2
建立一个存储过程,利用游标
相关文档
最新文档