第10章游标及事务
教学提示:游标(Cursor)是允许用户从满足条件的记录集中,逐条逐行地进行记录访问的数据处理机制;事务(Transaction)是由对数据库的若干操作组成的一个单元,这些操作要么都完成,要么都取消(如果在操作执行过程中不能完成其中任一操作),从而保证数据修改的一致性,并且在系统出错时确保数据的可恢复性机制。
教学要求:通过本章的学习,读者应该掌握游标的概念及其操作步骤:声明、打开、处理、关闭、释放;事务的概念及其事务控制:开启、回滚、提交。
游标( Cursor)
事务(Transaction)
实训
游标的概念
声明游标
打开游标
数据处理
关闭游标
释放游标
事务的概念
事务的模式
事务控制
第10章游标及事务
第10章游标及事务
1 游标
游标的概念
声明游标
打开游标
数据处理
关闭游标
释放游标
2 事务
事务的概念
事务的模式
事务控制
3 实训
4 小结
游标的概念
声明游标
打开游标
数据处理
关闭游标
释放游标
1 游标
游标的概念
为了对数据表集合中的每一行实现有针对性的操作, 引入“游标”.游标提供了一种在服务器端按行处理表中数据的机制。
游标具有类似C语言指针一样的结构,通过游标的引导可以识别数据表内指定的行,从而可以有选择的按行操作.
即游标包括两部分:查询结果集--由selelct返回,游标位置--通过查询结果集指向表中某一行的指针。
利用游标可以表中数据进行针对性的修改或删除
游标主要用在存储过程、触发器和T-sql的脚本中
对游标的操作有: 声明游标, 打开游标, 关闭游标, 释放游标, 按游标取数, 按游标修改记录等
select
游标
与游标对应的表
游标中的数据只是用于局部变量的存储,可作为操作对应表的依据
游标类型:
游标结果集存储在tempdb库中
静态游标:总是按照打开时的原样显示结果集,当有用户修改表数据时,就不能反应表中的现状,所以不能通过游标修改数据,只能读数据。
动态游标:动态游标每次读取时反映表中最新的所有更改,即当滚动游标时,所有用户的更改均通过游标可见。
键集游标:将结果集所有行的键值都存储在tempdb库中,当移动游标时,通过键值读取数据行的全部数据列,因此,这种游标可以反映对基表的非键值字段的全部更新。不能用于对键值的修改或插入,资源消耗介于动态与静态之间。该表必须有主键。
forward_only 只进。不支持滚动,仅支持next。只支持从头到尾的顺序提取数据,在行提取之后所作的更改对游标不可见。
Scroll 滚动。支持:next、prior、first、last、absolute、relative
例:将学生表中学号,姓名,年龄提取出来,按年龄升序排列,并将查询结果添加到一个名为“TXS”的表中,同时为每条记录加入“1,2,3…”序号.
USE CJGL
GO
CREATE TABLE TXS(序号 int, 学号 char(8), 姓名 char(8), 出生日期 DATETIME)
GO
DECLARE ***@I int
DECLARE ***@XH char(8), ***@XM char(8), @出生日期 DATETIME
DECLARE Mycursor SCROLL CURSOR
FOR SELECT 学号,姓名,出生日期 FROM XS
ORDER BY 出生日期--定义游标
OPEN Mycursor --打开游标
FETCH FIRST FROM Mycursor INTO ***@XH, ***@XM, @出生日期--从结果集中取出第一行,送给三个变量
SET ***@I=1
WHILE @***@FETCH_STATUS=0 --判断是否到了学生表的尾部
BEGIN
INSERT INTO TXS(序号,学号,姓名,出生日期)
VALUES (***@I,***@XH,***@XM,@出生日期)
FETCH NEXT FROM Mycursor INTO ***@XH, ***@XM, @出生日期
SET ***@I=***@I+1
END
CLOSE Mycursor --关闭游标
DEALLOCATE Mycursor --释放游标
GO
SELECT * FROM TXS
DROP TXS
GO
游标操作
-92标准
Declare 游标名[insensitive][scroll ] cursor
For select 语句
[For [read only | update [of 列1[,…n] ] ]
没有使用SCROLL定义游标, 只能用NEXT取数
Fetch [next | prior | firs
波浪理论大全-波浪分析 来自淘豆网m.daumloan.com转载请标明出处.