SQL Server 2008数据库应用技术 教学课件 ppt 作者 张素青 孙杰 第10章

上传人:E**** 文档编号:89401270 上传时间:2019-05-24 格式:PPT 页数:21 大小:401KB
返回 下载 相关 举报
SQL Server 2008数据库应用技术 教学课件 ppt 作者  张素青 孙杰 第10章 _第1页
第1页 / 共21页
SQL Server 2008数据库应用技术 教学课件 ppt 作者  张素青 孙杰 第10章 _第2页
第2页 / 共21页
SQL Server 2008数据库应用技术 教学课件 ppt 作者  张素青 孙杰 第10章 _第3页
第3页 / 共21页
SQL Server 2008数据库应用技术 教学课件 ppt 作者  张素青 孙杰 第10章 _第4页
第4页 / 共21页
SQL Server 2008数据库应用技术 教学课件 ppt 作者  张素青 孙杰 第10章 _第5页
第5页 / 共21页
点击查看更多>>
资源描述

《SQL Server 2008数据库应用技术 教学课件 ppt 作者 张素青 孙杰 第10章 》由会员分享,可在线阅读,更多相关《SQL Server 2008数据库应用技术 教学课件 ppt 作者 张素青 孙杰 第10章 (21页珍藏版)》请在金锄头文库上搜索。

1、第10章 T-SQL高级应用,目录,本章目标 理解:游标、事务的概念及作用 了解:锁的相关知识 掌握:并灵活运用游标和事务以提高系统的开发效率,本章内容 10.1 事务 10.2 游标 10.3 锁,10.1 事务,10.1.1 事务的特性 原子性(Atomicity) 隔离性(Isolation) 持久性(Durability),10.1.2 事务的分类,1. 自动处理事务 2. 显式事务 3. 隐式事务 4. 批处理级事务,10.1.3 事务的处理,1. 自动提交事务 【例10-1】针对数据库学生选课管理系统的“学生”表,做插入操作。产生编译错误的过程如下:,USE 学生选课管理 GO I

2、NSERT INTO 学生VALUES(10101004,张三,0, 1992-2-2,电子商务101) INSERT INTO 学生VALUES(10101005,李四,0, 1992-2-2,电子商务101) INSERT INTO 学生VALUSE(10101006,王五,0, 1992-2-2,电子商务101) -语法错误 GO SELECT * FROM 学生取 -不会显示上面插入的三条记录 GO,【例10-2】打开“新建查询”,写入如下代码,产生运行错误的具体过程如下:,USE 学生选课 GO INSERT INTO 学生VALUES(10101004,张三,0, 1992-2-2

3、,电子商务101) INSERT INTO 学生VALUES(10101005,李四,0, 1992-2-2,电子商务101) INSERT INTO 学生VALUES(10101001,王五,0, 1992-2-2,电子商务101) -健值重复错误 GO SELECT * FROM 学生-返回带有前两个记录的结果 GO,2. 显式事务,显示事务定义和提交的基本语句格式如下:,BEGIN TRANSACTION 事务名 | 事务变量名 COMMIT TRANSACTION 事务名 | 事务变量名,其中BEGIN TRANSACTION可以缩写为BEGIN TRAN, COMMIT TRANSA

4、CTION可以缩写为COMMIT TRAN或 COMMIT。,【例10-3】在数据库“学生选课”中,删除学号为“10101001”的所有记录信息。 因为在学生表中保存了该学生的个人信息记录,选课表中保存了该生所修课程以及成绩等信息,出于数据库整体一致特性考虑,要求对学生表和选课表中所有涉及学号为“10101001”的学生相关信息,要么都删除,要么都不删除。 为了验证事务处理的实际效果,我们需要将表中的原始结果提取出来,以下代码查看学生表和选课表中的原有记录情况,因此点击“新建查询”,写入以下代码。,(1)定义和提交事务,SELECT 学号,姓名,性别,出生年月,班级 FROM 学生 SELEC

5、T 学号,课程号,成绩 FROM 选课,BEGIN TRANSACTION DELETE 学生 WHERE 学号=10101001 DELETE 选课 WHERE 学号=10101001 COMMIT TRANSACTION,点击“执行”,运行结果如图10.4、10.5所示。 接下来,点击新建查询,写入如下代码,定义并提交一个事务。,(2)回滚事务,事务回滚使用ROLLBACK TRANSACTION命令,其基本语句格式如下所示:,ROLLBACK TRANSACTION 事务名|事务变量名|保存点名|保存点变量名,: SAVE TRANSACTION 保存点名 | 保存点变量名,如果要让事务

6、回滚到指定位置,则需要在事务中设定事务保存点。所谓保存点,是指在事务中使用T-SQL语句在某一个位置定义一个点,点之前的事务语句不能回滚,即此点之前的语句执行被视为有效。定义保存点的基本语句格式如下所示。,【例10-4】在数据库“学生选课”中,查询“选课”表中学号为“10101001”的所有选课信息,并将此学生所有的课程成绩更改为55分。,USE 学生选课 GO BEGIN TRANSACTION SELECT 学号,课程号,成绩 FROM 选课 WHERE 学号=10101001 SAVE TRANSACTION after_query UPDATE 选课 SET 成绩=55 WHERE 学

7、号=10101001 IF ERROR!=0 OR ROWCOUNT=0 BEGIN ROLLBACK TRANSACTION after_query -回滚到保存点 COMMIT TRANSACTION PRINT 更新选课学生成绩产生错误 RETURN END SELECT 学号,课程号,成绩 FROM 选课 WHERE 学号=10101001 COMMIT TRANSACTION,如果代码调整为:,USE 学生选课管理系统 GO BEGIN TRANSACTION SELECT 学号,课程号,成绩 FROM 选课 WHERE 学号=10101001 SAVE TRANSACTION af

8、ter_query UPDATE 选课 SET 成绩=105 WHERE 学号=10101001 IF ERROR!=0 OR ROWCOUNT=0 BEGIN ROLLBACK TRANSACTION after_query -回滚到保存点 COMMIT TRANSACTION PRINT 更新选课表学生成绩产生错误 RETURN END SELECT 学号,课程号,成绩 FROM 选课 WHERE 学号=10101001 COMMIT TRANSACTION,3. 隐式事务,隐式事务模式,在这种模式中,SQL Server在没有事务存在的情况下会开始一个事务,但不会像在自动模式中那样自动执

9、行COMMIT 或ROLLBACK 语句。隐式事务无须像显式事务那样必须以BEGIN TRANSACTION语句标示事务的开始,但是隐式事务必须显式结束(即COMMIT 或者ROLLBACK)。,【例10-5】在数据库“学生选课”中,启动并执行两个隐式事务,两个隐式事务完成向学生表中插入四条记录。,USE 学生选课管理系统 GO SET IMPLICIT_TRANSACTIONS ON -设置连接为隐式事务模式 GO INSERT INTO 学生 VALUES(10103001,王传,0,1991-3-2,电子商务) GO INSERT INTO 学生 VALUES(10103002,欧阳雨,

10、0,1992-2-2,电子商务) GO COMMIT TRANSACTION -提交第一个隐式事务 GO - 启动第二个隐式事务 INSERT INTO 学生 VALUES(10103003, 齐飞,1, 1990-6-1, 电子商务) GO INSERT INTO 学生 VALUES(10103004, 蓝波,0, 1992-7-4, 电子商务) GO ROLLBACK TRANSACTION -回滚第二个隐式事务 GO SET IMPLICIT_TRANSACTIONS OFF -关闭隐式事务模式 GO -返回自动事务模式,查询语句构成一个自动事务 SELECT * FROM 学生 GO,

11、10.2 游标,在SQL Server2008中使用游标的一般步骤如下: (1)声明游标:使用DECLARE CURSOR语句声明游标。语法格式为: DECLARE 游标名 CURSOR FOR SELECT 语句 (2)打开游标:使用OPEN CURSOR语句打开游标。 (3)提取游标:使用FETCH CURSOR语句,从结果集中检索特定的一行。 在打开一个游标后,它首先被放到结果集首行前,可以用FETCH NEXT语句访问其第一行。 FETCH NEXT FROM 游标名 INTO 变量名 (4)关闭游标:使用CLOSE CURSOR语句关闭游标。 (5)删除游标:使用DEALLOCATE

12、 CURSOR语句删除游标使用。,【例10-8】使用游标实现报表形式显示数据库“学生选课”中所有性别为0的“学生”的学号、姓名信息。,DECLARE no char(8) ,name char(8) DECLARE cur CURSOR FOR SELECT 学号,姓名 FROM 学生 WHERE 性别=0 -声明游标 OPEN cur -打开游标 FETCH NEXT FROM cur INTO no,name -第一次提取 PRINT SPACE(4)+-学生表- WHILE (FETCH_STATUS=0) -检查游标中是否有尚未提取的数据 BEGIN PRINT 学号:+no+ 姓名:

13、+name FETCH NEXT FROM cur INTO no,name END CLOSE cur -关闭游标 DEALLOCATE cur -删除游标 GO,【例10-9】通过游标将数据库“学生选课”中“课程”表的课程名和学分的对应关系以报表形式现实出来。,USE 学生选课 DECLARE KechengName char(8),Member char(8) DECLARE MyCursor CURSOR FOR SELECT 课程名,学分 FROM 课程 ORDER BY 学分-新建游标 OPEN MyCursor -打开游标 FETCH NEXT FROM MyCursor INT

14、O KechengName,Member -操作游标 PRINT SPACE(4)+-课程对应学分表- WHILE(Fetch_Status = 0) BEGIN PRINT 课程名:+KechengName + 学分: + Member FETCH NEXT FROM MyCursor INTO KechengName,Member END CLOSE MyCursor -关闭游标 DEALLOCATE MyCursor -释放游标,SELECT * FROM 选课 -显示更新后每个学生每门课成绩,USE 学生选课 SELECT * FROM 选课 -显示更新前学生每门课程成绩 DECLAR

15、E member char(8),ID int,score int DECLARE score_cursor CURSOR FOR SELECT 学号,课程号,成绩 FROM 选课 FOR UPDATE OF 成绩 -声明游标 OPEN score_cursor -打开游标 -从游标中读取数据 FETCH NEXT FROM score_cursor INTO member,ID,score WHILE(FETCH_STATUS=0) BEGIN IF(score=60) UPDATE 选课 SET 成绩=成绩-10 WHERE CURRENT OF score_cursor FETCH NEXT FROM score_cursor INTO member,ID,score END CLOSE score_cursor -关闭游标 DEALLOCATE score_cursor -删除游标,10.3 锁,SQL Server 2008锁模式 锁模式说明 共享(S):用于不更改或不更新数据的读取操作,如SELECT语句。 更新(U):用于可更新的资源中,防止当多个会话在读取、锁定以及随后可能进行的资源更新时发生常见形式

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

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

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