数据库事务创建与运行

上传人:第*** 文档编号:55333001 上传时间:2018-09-27 格式:PDF 页数:14 大小:387.49KB
返回 下载 相关 举报
数据库事务创建与运行_第1页
第1页 / 共14页
数据库事务创建与运行_第2页
第2页 / 共14页
数据库事务创建与运行_第3页
第3页 / 共14页
数据库事务创建与运行_第4页
第4页 / 共14页
数据库事务创建与运行_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《数据库事务创建与运行》由会员分享,可在线阅读,更多相关《数据库事务创建与运行(14页珍藏版)》请在金锄头文库上搜索。

1、北京邮电大学北京邮电大学实验报告实验报告课程名称课程名称数据库系统原理实验名称实验名称数据库的事务创建与运行计算机学院 网络工程 11 班薛玥指导教师 吴起凡成绩2014.5.25实验目的实验目的通过实验, 了解 SQL SERVER 数据库数据库系统中各类数据库事务的定义机制和基于锁的并发控制机制,掌握 SQL SERVER 数据库系统的事务控制机制。实验环境实验环境SQL Server 2005 应用环境Windows XP 操作系统实验背景实验背景多用户或者多进程并发操作数据库时必须有事务的概念,其具备 ACID 原则。SQL SERVER 也不例外,它的事务可分成以下几种: 显式事务:

2、以 BEGIN TRANSACTION 开始,COMMIT TRANSACTION 结束,中间是 一系列属于该事务的 SQL 语句。如果有错,可以用 ROLLBACK TRANSACTION 语句来撤 销。 隐式事务:使用 SET IMPLICIT_TRANSACTION ON 命令,可以在本连接上开始一个 隐式事务。除非显式执行 COMMIT TRANSACTION 或者 ROLLBACK TRANSACTION, 该 事务不会完成。 自动提交事务:如果连接没有设置为前两种事务,则其对每一条 SQL 语句自动提交, 即它是包含一条 SQL 语句的事务。 事务针对数据的修改,就是 CRUD(C

3、reate、Read、Update 和 Delete 的时候起作用。 完 全实现 ACID 原则非常困难, 而实现 ACID 原则的方法是非常灵活的, SQL SERVER 使用冗 余结构,即使用事务日志来实现事务的各种功能。1 显式执行模式:以 begin transaction 开始,以 commit transaction、rollback transaction结束。要注意 SQL SERVER 中事务不会自己检查错误,所以需要我们在事务中进行处理,写成如下形式:BEGIN TRANBEGIN TRY一系列 SQL 语句COMMIT TRANEND TRYCATCHRAISERROR(

4、 TransactionAborted,16,1)ROLLBACK TRANEND CATCH2 隐式事务:略。3 自动提交模式:略。实验内容与要求实验内容与要求一、在一、在 MS SQL SERVER 中实现单事务中实现单事务1 分别以三种事务方式,执行文档要求的以下操作。(1) 首先查看小区/扇区 ID 在 9011 和 9143 之间的小区的 LAC 号;(2) 然后将小区/扇区 ID 在 9011 和 9143 之间的小区的 LAC 号更新为 14120,将小区/扇区ID 在9151和9293之间的小区的 LAC号更新为14121, 将小区/扇区ID 在9311和 9573 之间的小区

5、的 LAC 号更新为 14123;(3) 最后再次查看小区/扇区 ID 在 9011 和 9143 之间的小区的 LAC 号。将以上操作组织成事务,分别执行下面两个操作:执行 rollback 语句,观察此次操作的结果。先执行 commit 语句,再执行 rollback 语句,观察此次操作的结果。显式事务:显式事务: 显式事务是由设计人员明确定义事务的启动与结束的一种事务。可使用 BEGIN TRANSACTION 、 COMMITTRANSACTION 、 COMMITWORK 、 ROLLBACK TRANSACTION、ROLLBACK WORK 等语句来定义显式事务。显示事务的特点是

6、要么删 除和插入同时成功,要么同时失败;自动提交事务自动提交事务 :SQL Server 的默认每个 SQL 语句为一个事务,不需要加 begin,rollback,commit,如果成功执行则自动提交, 否则回滚, 因为之前的实验一直采用这种方式, 这里不再截图说明隐式事务:隐式事务:打开隐式事务:set implicit_transactions on,在前一个事务完成时新事务隐式启动,但每个事务仍以 COMMIT 或 ROLLBACK 语句显式完成。 当以隐性事务模式操作时, SQL Server将在提交或回滚事务后自动启动新事务,不需要描述事务的开始,只需要提交或回滚事务。2 数据库模

7、式修改(1) 修改 GSM 数据库中的表 MSC 的模式,删除列 MSC 海拔海拔(使用 alter table drop) 。(2) 修改 GSM 数据库中的表 MSC 的模式,增加列 MSC 海拔海拔(使用 alter table add) 。普通执行:(1)(2)分别针对以上操作分别执行以下语句:(1) 执行 rollback 语句(2) 先执行 commit 语句在执行 rollback:执行完后查看数据库的 MSC 表,并无影响。3 执行比较(1) 成功执行比较普通查询方法a查询所属交换机 MscID=5214 的 BSCID、BSCName;b在表 BSC 中,添加一条 BSC 的

8、信息,其所属交换机 MscID=5214;c删除 b 所添加的 BSC 的信息;d查询所属交换机 MscID=5214 的 BSCID、BSCName。针对以上操作分别进行如下的操作:a将以上操作组织成普通的 SQL 语句,顺序执行。b将以上操作组织成事务执行(以以 begin tran 开始,以开始,以 commit tran 结束结束) 。(2) 失败执行比较a查询全网 BSC 的基本信息;b在表 BSC 中,添加一条 BSC 的信息,其所属交换机 MscID=5214;c在表 BSC 中,添加一条 BSC 的信息,其所属交换机 MscID=5220(注意此注意此时时MscID 不满足外键

9、约束不满足外键约束) ;d查询全网 BSC 的基本信息。针对以上操作分别进行如下的操作:a将以上操作组织成普通的 SQL 语句,顺序执行。b将以上操作组织成事务执行(以以 begin tran 开始,以开始,以 commit tran 结束结束) 。4 针对 (1)成功执行比较成功执行比较创建的事务,在不同位置设置保存点 savepoint(例如添加之后、添加之前、删除之后等) ,使用 SAVE TRANSACTION savepoint_name 语句创建保存点,使用 ROLLBACK TRANSATCTION to savepoint_name 语句将事务回滚,观察每次操作的结果。保存点提

10、供了回滚部分事务的机制,而不是回滚到事务的开始。二、实现事务的并发执行二、实现事务的并发执行1 锁信息(1)查看SQL SERVER 数据库使用的各种类型的锁、锁的持续时间。(2) 隔离级别与锁的关系根据选择的隔离级别, 数据库服务器将使用锁类型中的一些或全部来保持所要求的一致性等级。根据需要使用模式锁、行锁、表锁等来确保所要求的一致性级别,不需要显式请求使用某个特定的锁定。 而应通过选择最符合要求的隔离级别来控制所维护的一致性级别。了解各种锁类型有助于选择隔离级别和理解各个级别对性能的影响。通过上网查找资料并做了解学习后,作如下解释说明: 1.(SET TRANSACTION ISOLATI

11、ON LEVEL READ COMMITTED| READ UNCOMMITTED| REPEATABLE READ | SERIALIZABL E)其中, READ COMMITTED指定在读取数据时控制共享锁以避免脏读, 但数据可在事务结束前更改, 从而产生不可重复读取或幻像数据。该选项是 SQL Server 的默认值。避免脏读,并在其他 session 在事务中不能对已有数据进行修改。共享锁。 READ UNCOMMITTED执行脏读或 0 级隔离锁定,这表示不发出共享锁,也不接受排它锁。当设置该选项时,可以对数据执行未提交读或脏读; 在事务结束前可以更改数据内的数值, 行也可以出现在

12、数据集中或从数据集消失。该选项的作用与在事务内所有语句中的所有表上设置 NOLOCK 相同。这是四个隔离级别中限制最小的级别。REPEATABLE READ锁定查询中使用的所有数据以防止其他用户更新数据, 但是其他用户可以将新的幻像行插入数据集,且幻像行包括在当前事务的后续读取中。因为并发低于默认隔离级别,所以应只在必要时才使用该选项。SERIALIZABLE在数据集上放置一个范围锁, 以防止其他用户在事务完成之前更新数据集或将行插入数据集内。这是四个隔离级别中限制最大的级别。因为并发级别较低,所以应只在必要时才使用该选项。该选项的作用与在事务内所有 SELECT 语句中的所有表上设置 HOL

13、DLOCK 相同。2.设置锁的时间Set Lock_TimeOut 5000设置锁时间为 5000 毫秒通过查找资料,我明白了 隔离级别与锁的关系,即 根据选择的隔离级别,数据库服务器将使用锁类型中的一些或全部来保持所要求的一致性等级。根据需要使用模式锁、行锁、表锁等来确保所要求的一致性级别, 不需要显式请求使用某个特定的锁定。 而应通过选择最符合要求的隔离级别来控制所维护的一致性级别。 了解各种锁类型有助于选择隔离级别和理解各个级别对性能的影响。利用表格说明,则表示如下:隔离级别隔离级别脏读脏读不可重复读取不可重复读取幻像幻像说明说明可重复读否否是查询期间不允许其他事务 update可串行读

14、否否否查询期间不允许其他事务 inser 或 delete未提交读是是是如果其他事务更新,不管是否提交,立即执行提交读否是是读取提交过的数据2 设计 2 个带有冲突操作的并发事务,由 2 个不同用户或者说 2 个不同连接启动,并分别设置不同的隔离级别2 个用户分别启动各自的事务,观察事务的执行情况:(1) 利用sys.dm_tran_locks 等系统视图列出有关数据库中保留的锁的信息。 也可以使用其它方法列出事务上的锁。(设停留为 5 秒, 则当执行完查询 1 后, 必须要停留 5 秒钟之后, 即修改完毕后, 解锁,才能够执行查询 2,查询结果 5 秒后显示在屏幕上。读的时候不能 updat

15、e 和 insert。如下图所示。 )实验总结实验总结通过本次试验, 首先我对于事务的三种模式进行了学习, 并且知道了如何查看实物的隔 离级别。显式事务是由设计人员明确定义事务的启动与结束的一种事务。可使用 BEGIN TRANSACTION 、 COMMITTRANSACTION 、 COMMITWORK 、 ROLLBACK TRANSACTION、ROLLBACK WORK 等语句来定义显式事务。显示事务的特点是要么删 除和插入同时成功,要么同时失败;SQL Server 的默认每个 SQL 语句为一个事务,不需要 加 begin,rollback,commit,如果成功执行则自动提交,否则回滚,这是自动提交事务, 使 用 set implicit_transactions on 来打开隐式事务,在前一个事务完成时新事务隐式启动,但每 个事务仍以 COMMIT 或 ROLLBACK 语句显式完成。 当以隐性事务模式操作时, SQL Server 将在提交或回滚事务后自动启动新事务,不需要描述事务的开始。 此外,通过自己动手做实验,我知道了将一组相关操作组合为一个单元,可以简化错误 恢复,能够提高程序的可靠性。

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

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

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