- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第四章 数据库事务
SQL Server 2005数据库系统通过事务保证多个数据库操作在一起处理,而事务使用锁定技术来防止其他数据库用户来更新或读取末完成事务中的数据。同时,SQL Server数据库系统为了提高自身的性能,实现多用户之间数据的共享,采用并发控制策略来实现多个任务的并行运行。
4.1 SQL Server中事务的定义
实验目的
原理分析
验内容
实验步骤
要求:(1) 采用隐式事务方式来实现事务编程。
采用显式用户定义事务的方式来实现事务编程。
(3) 事务与批命令。
(4) 嵌套事务的编程。
(5 ) 在存储过程、触发器中使用事务编程。
(6) 命名事务与事务保存点。
分析与解答:
(1) AutoCommit事务是SQL Server默认事务方式。它指出每条SQL语句都构成事务,隐含事务的开始与结束控制点。示例代码4.1.1实现从银行卡中转账100元到校园卡的功能。如果在执行语句时遇到错误,则撤消操作,否则提交并保存操作的结果。
代码4.1.1
思考一下,这样的事务编程是否会造成数据库状态的不一致呢?
由于上面的代码中采取的隐式事务方法,如果对该学生的银行卡数据更新成功,由会自动向数据库提交。假若后来对该学生校园卡的数据更新末能成功,则就造成转帐失败,但前一操作已经提交,无法还原。这就可能会造成对数据库状态与事实语义不一致。
针对这一问题,需要设法将这若干条SQL语句组合成一个独立的事务,这样才能保证各个操作步骤要么同时成功,要么一起失败。这就需要操作步骤2中所提出的定义显式事务方式来处理事务。
(2) 为了完全控制事务并定义多个操作步骤组成的逻辑工作单元,可以采用显式用户定义事务的方式来实现用户期望的逻辑操作,见代码4.1.2。
代码4.1.2
(3) 批处理是由一条或多条Transact SQL语句或命令组成的,它能够成组的运行,用于向SQL Server提交成组的Transact SQL的语句组,由Go语句来终止语句组。批处理经过整体编译一次成为一个执行计划,并一次将整个执行计划执行完毕。注意除非批命令没有固有的事务性质,除显式的定义由几个语句构成的单个事务,否则批命令中的每条语句都是一个互相独立的事务,每条语句单独完成或者失败,而且批命令中的一个事务失败,不会影响其他语句的执行。
在查询分析器中输入代码4.1.3:
代码4.1.3
打开SQL Server Profiler,新建跟踪,使用standard标准模板。此时SQL Server Profiler中会把SQL Server中的事件记录下来。执行代码4.1.3,结果如4.11所示。显示SQL BatchStarting和SQL BatchCompleted语句都分别只有一条,说明批处理是一个完整的执行计划,并且要将整个执行计划执行完毕。
图4.1.1 批处理操作跟踪
相反,如果没有GO语句,读者也可以通过事件探查器来观察一下,结果是每个语句单独执行。
(4) 嵌套事务主要是为了支持存储过程中的一些事务,这些事务可以从事务中已有的进程中调用,也可以从没有活动的事务进程中调用。嵌套事务对于COMMIT TRANSACTION语句的每个调用都对应于最后执行的BEGIN TRANSACTION语句,也就是最内层的事务。读者执行事务嵌套的实例代码4.1.4,执行结果如图4.1.2。 。
代码4.1.4
图4.1.2
(5) 触发器是一种特殊类型的存储过程,主要用于完成数据库中对象的完整性。在表中进行数据修改时自动执行,触发器被视为执行数据修改事务的一部分,与数据修改语句在同一事务空间中执行。由于触发器已经在事务情境中操作,因此事务中要的事务控制语句只有ROLLBACK或者SAVE TRAN,用户不需要发出BEGIN TRAN。代码4.1.5为Courses的删除操作创建一个触发器,然后执行一个删除操作,观察事务数目的变化。在删除操作执行的过程中,触发器得到执行,而且事务的数目为1,这就验证了触发器事务是数据修改事务的一部分。
代码4.1.5
执行以下代码:
PRINT 删除操作以前触发器中的事务数为: + CONVERT(VARCHAR(2),@@TRANCOUNT);
DELETE FROM COURSES
WHERE CID=10052
PRINT 删除操作之后触发器中的事务数为: + CONVERT(VARCHAR(2),@@TRANCOUNT);
所得结果图4.1.3所示。
图4..1.3
同样可以从事务中调用存储过程,也可以在存储过程中启动事务,而且这是经常在数据库开发过程中应用到的,因为在存储过程中使用事务,可以提高数据库操作的效率,可以方便维护。在企业管理器中创建存储过程图4.1.4示。
CREATE PRO
您可能关注的文档
最近下载
- (高清版)DB13∕T 5769-2023 钢丝编织隔离栅应用技术导则.pdf VIP
- 和美乡村建设工程监理细则.docx VIP
- 和美乡村建设工程监理工作总结.docx VIP
- 生命体征生命体征测量.ppt VIP
- 2024年9月28日上海市浦东新区社区工作者考试《综合能力测验》真题及答案.docx VIP
- GBT 15781-2015 森林抚育规程.pdf
- (正式版)D-L∕T 448-2016 电能计量装置技术管理规程.docx VIP
- 第二章坐标系统和时间系统.ppt VIP
- 顺河场镇中心学校食堂环境卫生方案.doc VIP
- 【国家标准】GBT 20828-2015 柴油机燃料调和用生物柴油(BD100).pdf
文档评论(0)