SQLServer实例教程2008版电子教案 第1 0章

上传人:w****i 文档编号:90859553 上传时间:2019-06-19 格式:PPT 页数:29 大小:3.97MB
返回 下载 相关 举报
SQLServer实例教程2008版电子教案 第1 0章_第1页
第1页 / 共29页
SQLServer实例教程2008版电子教案 第1 0章_第2页
第2页 / 共29页
SQLServer实例教程2008版电子教案 第1 0章_第3页
第3页 / 共29页
SQLServer实例教程2008版电子教案 第1 0章_第4页
第4页 / 共29页
SQLServer实例教程2008版电子教案 第1 0章_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《SQLServer实例教程2008版电子教案 第1 0章》由会员分享,可在线阅读,更多相关《SQLServer实例教程2008版电子教案 第1 0章(29页珍藏版)》请在金锄头文库上搜索。

1、第 10 章 游标、事务和锁,不知则问,不能则学 董仲舒,本章导航,本章任务描述,游标,一、游标概述,在SQL Server 2008中使用游标的一般步骤如下: (1)声明游标(DECLARE CURSOR)。 (2)打开游标(OPEN CURSOR)。 (3)提取游标(FETCH CURSOR)。 (4)根据需要,对游标中当前位置的行执行修改操作(更新或删除)。 (5)关闭游标(CLOSE CURSOR)。 (6)释放游标(DEALLOCATE CURSOR)。,游标主要用于存储过程、触发器和T-SQL脚本中,使用游标时通常要用到以下的基本语句。 (一)DECLARE CURSOR。 (二)

2、OPEN CURSOR。 (三)FETCH CURSOR。 (四)CLOSE CURSOR。 (五)DEALLOCATE CURSOR。,二、游标实例,任务1,使用游标实现报表形式显示“促销”商品的g_ID(商品号)、g_Name(姓名)和g_Price(价格)。,二、游标实例,【提示】 使用price varchar(50)而不使用price float便于接受数据并显示。 DECLARE CURSOR 定义 T-SQL服务器游标的属性,例如游标的滚动行为和用于生成游标所操作的结果集的查询。 OPEN 语句填充结果集。 FETCH 从结果集返回行。 CLOSE 语句释放与游标关联的当前结果集

3、。 DEALLOCATE 语句释放游标所使用的资源。,事务,任务2,应用SQL Server 2008中的自动处理事务、显式事务和隐式事务进行数据处理,帮助实现数据的一致性和完整性。,一、事务概述,1、事务是一个不可分割的工作逻辑单元,在SQL Server中应用事务来保证数据库的一致性和可恢复性。 2、一个逻辑工作单元必须具备以下四种属性,也称做ACID(每种属性英文名称的首字母缩写)属性。 (1)原子性(2)一致性(3)隔离性(4)持久性 3、SQL Server中的事务有以下几种类型: (1)自动处理事务。 (2)隐式事务。 (3)显式事务。 (4)批处理级事务。,二、自动提交事务,【任

4、务2-1】产生编译错误的批处理。,【提示】 因为CREATE TABLE语句与INSERT语句不在同一个批处理(以GO分隔)中,因此TestTran表创建成功,在遇到编译错误时也没有回滚。 如果将CREATE TABLE语句之后的GO删除,即将CREATE TABLE语句与INSERT语句放在同一个批处理中,在执行时遇到编译错误时CREATE TABLE语句也不能成功执行。,【任务2-2】产生运行错误的批处理。,二、自动提交事务,(一)定义和提交事务 通常在程序中用BEGIN TRANSACTION 命令来标识一个事务的启动开始,用COMMIT TRANSACTION 命令标识事务结束。这两个

5、命令之间的所有语句被视为一体,即事务。,三、显式事务,【任务2-3】删除商品号为010006的商品记录,考虑到在订单详情表中保存了该商品的销售记录,出于数据一致性考虑,要求要么在商品表和订单详情表中都删除该商品信息,要么都不删除。,三、显式事务,【提示】 单独的一个DELETE语句是一个自动提交事务,由数据库系统自动维护。 使用BEGIN TRANSACTION将两个自动提交事务设置为一个显式事务,保证两个DELETE语句要么同时执行,要么都不执行。 如果采用了主键和外键约束,则删除操作不能成功执行。,三、显式事务,(二)回滚事务,【任务2-4】查询类别编号为03的商品信息,并将此商品类别编号

6、对应的类别名称修改为电器产品。,三、显式事务,当连接以隐性事务模式进行操作时,SQL Server 数据库引擎实例将在提交或回滚当前事务后自动启动新事务。 隐性事务模式既可以使用T-SQL的SET语句来设置,也可以通过数据库API函数和方法来设置。,四、隐式事务,【课堂实践1】,操作要求: (1)使用游标实现以报表形式显示“热点”商品的g_ID(商品号)、g_Name(姓名)和g_Price(价格)。 (2)在产生订单时,将对Orders表的订单记录插入操作和对OrderDetails表中的订单详情记录插入操作组合成一个事务进行处理。,锁,任务3,了解SQL Server 2008中的锁以实现

7、数据库并发操作,使用TRY-CATCH来解决死锁。,当多个用户同时访问一个数据库而没有进行锁定时,如果他们的事务同时使用相同的数据时可能会发生问题,这些由于同时操作数据库产生的问题称为并发问题,主要包括: 1、丢失更新 2、未确认的相关性(脏读) 3、不一致的分析(非重复读) 4、幻象读,一、并发问题,1、共享锁 2、排他锁 3、修改锁 4、意向锁:意向锁又分为共享意向锁、排他意向锁和共享式排他意向锁三种。 5、架构锁: 6、大容量更新锁 7、键范围锁,二、锁的类型,三、查看锁,【任务3-1】对数据表Goods执行插入和查询操作,检查在程序执行过程中锁的使用情况。,隔离本质上是一种封锁机制。它

8、是指自动数据处理系统中的用户和资源的相关牵制关系,也就是用户和进程彼此分开且与操作系统的保护控制也分开来。在SQL Server中,隔离级是指一个事务和其他事务的隔离程度,即指定了数据库如何保护锁定那些当前正在被其他用户或服务器请求使用的数据。 在SQL Server中有以下四种隔离级: (1)READ COMMITTED。 (2)READ UNCOMMITTED。 (3)REPEATABLE READ。 (4)SERIALIZABLE。,四、设置事务隔离级别,【任务3-2】设置事务隔离级别REPEATABLE READ。,USE WebShop GO SET TRANSACTION ISOL

9、ATION LEVEL REPEATABLE READ GO BEGIN TRANSACTION GO SELECT * FROM Goods GO SELECT * FROM Orders GO COMMIT TRANSACTION GO,四、设置事务隔离级别,五、死锁的处理,(一)死锁概述 在两个或多个任务中,如果每个任务锁定了其他任务试图锁定的资源,此时会造成这些任务永久阻塞,从而出现死锁。死锁状态如图所示。,(二)死锁检测 SQL Server能够自动定期搜索和处理死锁问题。SQL Server在每次定期搜索中标识所有等待锁定请求的会话,如果在下一次搜索中被标识进程仍处于等待状态,SQ

10、L Server将开始递归死锁搜索。,五、死锁的处理,(三)死锁处理,【任务3-3】使用TRY-CATCH进行死锁处理。,五、死锁的处理,【提示】 ROLLBACK后面使用WAITFOR语句,保证在死锁发生后等待一段时间。 count为重新尝试的次数,可以根据实际情况进行调整。 重新定义发生的错误,以便于RaiseError抛出。因为RaiseError可以抛出异常,但却不能直接抛出死锁中的异常。,五、死锁的处理,【课堂实践2】,操作要求: (1)将数据表Customers的修改和查询操作组合成一个事务,在执行事务过程中检查锁的使用情况。 (2)完成“任务3-3”的死锁处理的例子。,小 结,本章学习了如下内容: 游标,包括游标概述、使用DECLARE CURSOR声明游标、使用OPEN打开游标、使用FETCH获取游标、使用CLOSE关闭游标、使用DEALLOCATE删除游标引用,游标实例; 事务,包括事务概述、自动提交事务、显式事务(使用BEGIN TRAN定义事务、使用COMMIT提交事务、使用ROLLBACK回滚事务)、隐式事务; 锁,包括并发问题、锁的类型、查看锁、设置事务隔离级别、死锁的处理。,

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

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

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