- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验六事务与并发控制
实验六 事务与并发控制
班级:软件1412 姓名:王茂潭 学号:1411651214
一.实验目的
理解事务的基本概念
掌握定义事务和使用事务的方法。
验证并发操作带来的数据不一致性。
了解锁机制。
二.实验内容
1.定义事务,将课程表中的“数据库”课程名称改为“数据库原理”,并提交该事务。
2.定义事务,删除授课表和教师表中教师号为“120578”的记录,并提交该事务。
3.设计事务验证并发操作带的数据不一致性。
设计账户表account,表结构如表1所示,表中数据如表2所示。
表1 account数据表结构
列名称说明数据类型id账号,主码intbalance账户余额int
表2 account表的数据
idbalance1201100012021000
(1)分别新建2个查询,定义2个事务。事务1从1201账户取出100元,在事务1提交之前,事务2又从1201账户取到50元,然后读取账户表,最后分别提交事务1和事务2。程序样例中并发控制一和二,哪个会出现丢失修改?为什么?
注:在事务1中,使用“WAITFOR DELAY”等待事务2的执行,以模拟并发操作。
(2)分别新建2个查询,定义2个事务。事务1读取账户余额。事务2从1201账户取出100元,然后事务1再次读账户余额,最后分别提交事务1和事务2。程序样例中的并发控制程序执行后,分析事务1两次读取的账户余额是否一致,会出现不可重复读吗?
注:在事务1中,使用“WAITFOR DELAY”等待事务2的执行,以模拟并发操作。
(3)分别新建2个查询,定义2个事务。事务1从1201账户取出100元,事务2读账户余额,然后事务1回滚事务,最后分别提交事务1和事务2。程序样例中的并发控制程序执行后,事务2读取的账户余额与数据库中的数据是否一致,会出现读脏数据吗?
注:在事务1中,使用“WAITFOR DELAY”等待事务2的执行,以模拟并发操作;在定义事务之前,使用“SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED”重新设置事务的隔离级别。
4.解决3中出现的数据不一致问题
(1)在从账户取钱之前,为账户表加上排它锁,以解决丢失修改问题。
(2)设置隔离级别“SET TRANSACTION ISOLATION LEVEL REPEATABLE READ”,以解决不可重复读问题。
(3)设置隔离级别“SET TRANSACTION ISOLATION LEVEL READ COMMITTRED”,以解决读脏数据问题。
程序样例:
3.(1)并发控制一
begin transaction /*事务T1*/
declare @sum float
update account set balance= balance -100 where id=1201
/*从1201账户取出100元*/
waitfor delay 00:00:10
set @sum=(select balance from account where id=1201)
if @sum0 rollback else commit /*余额不足*/
begin transaction /*事务T2*/
declare @sum float
update account set balance= balance -50 where id=1201
/*从1201账户取出50元*/
set @sum=(select balance from account where id=1201)
if @sum0 rollback else commit/*余额不足*/
并发控制二
begin transaction /*事务T1*/
declare @sum float
set @sum=(select balance WITH (tablockx) from account where id=1201)
waitfor delay 00:00:10
update account set balance=@sum-100 where id=1201
/*从1201账户取出100元*/
if @sum-1000 rollback else commit/*余额不足*/
begin transaction /*事务T2*/
declare @sum float
set @sum=(select balance from account where id=1201)
update account set balance=@sum-50 where id=1201
/*从1201账户取出100元*/
if
您可能关注的文档
最近下载
- 《旅行社经营与管理》电子教案 2-3 旅行社产品开发与设计3.docx VIP
- 2025年知识付费行业市场细分领域竞争格局分析.docx VIP
- 《贵细中药饮片推荐目录及管理策略》.docx VIP
- 《旅行社经营与管理》电子教案 7-2 旅行社客户和质量管理2.doc VIP
- 《旅行社经营与管理》电子教案 2-2 旅行社产品开发与设计2.docx VIP
- 统编版语文四年级上册9《古诗三首》课件(共24张PPT).pptx
- 光子学现代通信光电子学 第6版 [(美)亚里夫,(美)耶赫 著] 2014年版_部分20.pdf VIP
- 第21课 马克思主义的诞生和国际共产主义运动的兴起 课件(共15张PPT)(含音频+视频).pptx VIP
- 教科版(2024)小学科学一年级上册(全册)教案及反思(含目录).docx VIP
- 《旅行社经营与管理》电子教案 7-1 旅行社客户和质量管理1.doc VIP
文档评论(0)