资源描述
第第13章章 游标及事务游标及事务计算机系 软件教研室复习旧课:复习旧课:l上机题上机题4为表student_course建立更新触发器,当更改表student_course中的数据时,如果成绩grade由原来的=60,该生得到相应的学分,如由=60更新为=60)select credit0=course.credit from course,inserted where course.course_id=inserted.course_id else set credit0=0/*更新student_course 表的credit*/update student_course set student_course.credit=credit0 from student_course,inserted where student_course.course_id=inserted.course_id and student_course.student_id=inserted.student_id /*注意:主键student_id 和 course_id*/end第第13章章 游标及事务游标及事务l目标和内容l游标的概念l游标的使用方法l事务的概念l事务的使用方法第第13章章 游标及事务游标及事务l13.1 游标的定义及其优点l13.2 游标的使用l13.3 使用游标修改数据l13.4 事务的使用13.1 游标的定义及其优点游标的定义及其优点l关系数据库中的操作会对整个行集产生影响。由 SELECT 语句返回的行集包括所有满足该语句 WHERE 子句中条件的行。由语句所返回的这一完整的行集被称为结果集。l应用程序,特别是交互式联机应用程序,并不总能将整个结果集作为一个单元来有效地处理。这些应用程序需要一种机制以便每次处理一行或一部分行。游标就是提供这种机制的结果集扩展。13.1 游标的定义及其优点游标的定义及其优点l定义:l游标(cursor)是一种数据处理方法,实现对查询结果集中的数据逐行处理。l可以把游标看成一种指针,它可以指向结果集中的任意位置,提供了在结果集中向前或向后浏览数据的能力。l游标示面向集合面向集合的数据库管理系统(RDBMS)和面向行面向行的程序设计之间的桥梁,使这两种处理方式通过游标沟通起来。13.2 游标的使用游标的使用13.2.1步骤1.创建游标2.打开游标3.从游标的结果集中读取数据4.对游标中的数据逐行操作5.关闭和释放游标声明游标打开游标关闭游标释放游标提取并逐行处理游标中的行数据处理完毕?NO图13-1 游标使用流程13.2.2 游标的定义及使用过程游标的定义及使用过程1.声明游标声明游标l语法:DECLRAE cursor_name SCROLL COUSORFOR select_statementFOR READ ONLY|UPDATE OF column_name_listl注意:注意:1)READ ONLY2)UPDATE(缺省)3)声明游标的DECLRAE COUSOR语句,必须在该游标的任何OPEN 语句之前。2.打开游标打开游标l语法:OPEN cursor_namel注意:l游标打开成功时,游标位置指向结果集的第一行之前。l只能打开已经声明但尚未打开的游标。3.从打开的游标中提取行从打开的游标中提取行l语法:FETCH NEXT|PRIOR|FIRST|LAST|ABSOLUTE|RELATIVE FROM Cursor_name INTO fetch_target_list l说明:lNEXT (默认值)lPRIORlFIRSTlLASTlABSOLUTElRELATIVElFetch_target_list3.从打开的游标中提取行从打开的游标中提取行l提供游标活动信息的两个全局变量lfetch_statuslrowcount4.关闭游标关闭游标l含义:停止处理定义游标的那个查询。l语法:close cursor_namel下列情况,SQL Server自动关闭打开的游标:1.当退出这个SQL Server 会话时;2.从声明游标的存储过程中返回时。5.释放游标释放游标l含义:释放所有分配给游标的资源,包括该游标的名字。l语法:DEALLOCATE CURSOR cursor_namel注意与关闭游标区别举例举例l例13-1定义一个游标,将教师表中的所有的教师的姓名、职称逐行显示出来。use jwglgodeclare teach_name Varchar(8),teach_profession Varchar(16)declare teacher_cursor SCROLL cursor For select teacher_name,profession from teacher for read onlyopen teacher_cursorFetch next from teacher_cursor into teach_name,teach_profession /*提取第一行*/while fetch_status=0 /*当提取成功时*/begin print 教师姓名:+teach_name+职称:+teach_profession Fetch next from teacher_cursor into teach_name,teach_profession /*提取下一行*/end close teacher_cursor deallocate teacher_cursor13.3 使用游标修改数据使用游标修改数据l13.3.1 更新数据l语法:UPDATE table_name|view_nameset table_name.|view_name.column_name=new_valuenWHERE CURRENT OF cursor_namel例13-2l例13-2在teacher表上定义游标teacher_cursor,将表中绝对位置为3的教师的职称修改为教授.use jwglgo/*定义游标teacher_cursor*/declare teacher_cursor scroll cursor forselect teacher_name,profession from teacher for update of professionopen teacher_cursor/*打开游标*/*提取游标 绝对位置 3 的教师 姓名和职称*/fetch absolute 3 from teacher_cursor/*修改 游标当前位置的profession*/update teacher set profession=教授where current of teacher_cursorfetch absolute 3 from teacher_cursorclose teacher_cursor deallocate teacher_cursor13.3 使用游标修改数据使用游标修改数据l13.3.2 删除数据l语法:DELETE FROM database.owner.table_name|view_nameWHERE CURRENT OF cursor_namel注意事项:P209-21013.4 事务的使用事务的使用l13.4.1 什么是事务?l所谓事务(Transaction),是指一个操作序列,这些操作序列要么都被执行,要么都不执行,它是一个不可分割的工作单元。l事务是并发控制的基本单元,避免多用户并发存取同一数据可能导致的数据的不一致性。l事务中的任何一个语句出错,系统都会返回到事务开始前的状态。13.4.2 事务的特点及事务的管理事务的特点及事务的管理 l特点:l一致性l隔离性l可恢复性l事务管理:l事务控制语句l锁机制l事务日志 避免死锁,应注意:p21013.4.3 事务控制语句事务控制语句l1.事务控制语句事务控制语句lBEGIN TRAN tran_namelCOMMIT TRAN tran_namelROLLBACK TRAN tran_name|save_namelSAVE TRAN save_namel2.用于事务管理的全局变量:用于事务管理的全局变量:lerrorlrowcountl3.事务控制语句的使用事务控制语句的使用BEGIN TRAN /*A组语句序列*/SAVE TRAN save_point /*B组语句序列*/If error0 ROLLBACK TRAN save_point /*仅回退B组语句序列*/COMMIT TRAN /*提交A组语句,若未回退B组语句则提交B组语句*/4.事务使用示例事务使用示例l例13-3 使用事务向表book中插入数据。use jwgl go begin tran tran_examp insert into book (book_id,book_name,publish_company)values (dep04_s006_01,VFP程序设计,南京大学出版社)save tran int_pointinsert into book(book_id,book_name,publish_company)values(dep04_s006_02,VFP实验指导书,东南大学出版社)go insert into book(book_id,book_name,publish_company)values(dep04_s006_03,VFP课程设计指导书)GO IF error0ROLLBACK TRAN int_pointgoCOMMIT TRAN tran_exampgo5.事务中不能包含的语句事务中不能包含的语句lCREATE DATABASElALTER DATABASElBACKUP LOGlDROP DATABASElRECONFIGURElRESTORE DADABASElRESTORE LOGlUPDATE STATISTICS小结小结:l游标的概念:逐行处理数据,与某个查询结果集有关。l游标的使用方法:声明、打开、提取游标行、关闭、释放。l事务的概念:是指一个操作序列,这些操作序列要么都被执行,要么都不执行,它是一个不可分割的工作单元。l事务的使用方法:lBEGIN TRAN tran_namelCOMMIT TRAN tran_namelROLLBACK TRAN tran_name|save_namelSAVE TRAN save_namel2个全局变量:个全局变量:error、rowcount思考题:思考题:1.什么是游标?使用游标的优点是什么?2.关闭游标与释放游标有什么不同?3.什么是事务?事务的特点是什么?与批相比哪个好?上机作业:上机作业:1.在teacher表上定义一个查询系号为dep_04、包含教师的姓名、职称和家庭住址的只读游标teacher_cursor,并将游标中的记录逐条显示出来。2.以事务方式和以非事务方式修改student表中学号为g99402011的学生的姓名和出生年月,比较执行结果有什么不同。3.以事务方式向course表插入3条记录:课程号课程名 书号dep04_s006网络数据库 dep04_s006_01dep04_s007ASP动态网站设计 dep04_s007_01 dep04_s008专业英语
展开阅读全文