数据库实验报告7.docx_第1页
数据库实验报告7.docx_第2页
数据库实验报告7.docx_第3页
数据库实验报告7.docx_第4页
数据库实验报告7.docx_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据库原理实验报告题目:实验七事务与并发控制学号姓名班级日期XxxxXxXxx2016.11.10一. 实验内容、步骤以及结果假设学校允许学生将银行卡和校园卡进行绑定, 在 student 数据库中有如下的基本表, 其中校园卡编号 cardid 即为学生的学号: icbc_card(studcardid,icbcid,balance) /校园卡 ID,工行卡 ID,银行卡余额 campus_card(studcardid,balance) /校园卡 ID,校园卡余额 数据创建的代码: 1. 编写一个事务处理(begin tran)实现如下的操作:某学号为20150032的学生要从银行卡中转账200元到校园卡中,若中间出现故障则进行rollback。(15分)修改后的结果:2. 针对本题的数据库和表,分别用具体的例子展现四种数据不一致问题:丢失修改、读脏数据、不可重复读和幻读(删除和插入)。(40分,每种数据不一致10分)l 丢失修改:-事务一:begin trandeclare balance decimal(10,2) select balance=balance from campus_card where studcardid=20150033 waitfor delay00:00:05 set balance=balance-10 update campus_card set balance=balance where studcardid=20150033 commit tran go select balance from campus_card where studcardid=20150033-事务二:begin tran declare balance1 decimal(10,2) select balance1=balance from campus_card where studcardid=20150033 set balance1=balance1-20 update campus_card set balance=balance1 where studcardid=20150033 commit tran go select balance from campus_card where studcardid=20150033【事务 1】更改了数据,结果为 60,但是没有被读到。最终【事务 2】的结果 50 覆盖了【事 务 1】的更改值,结果不是期望值 40l 读脏数据-事务一:begin tran declare balance decimal(10,2)select balance=balance from campus_card where studcardid=20150032 update campus_card set balance=balance+100 where studcardid=20150032 waitfor delay00:00:05 rollback tran-回滚 go select balance from campus_card where studcardid=20150032-事务二:begin tran declare balance decimal(10,2) select balance=balance from campus_card where studcardid=20150032 update campus_card set balance=balance+50 where studcardid=20150032 commit tran go select balance from campus_card where studcardid=20150032【事务1】原数据为50,更改了数据+100, 【事务2】读取了表中更改后的值再进行操作, 【事务1】回 滚。最终的表存储了错误结果。l 不可重复读-事务一:begin tran select balance from campus_card where studcardid=20150031 waitfor delay00:00:05 select balance from campus_card where studcardid=20150031 commit tran -事务二: begin tran update campus_card set balance=balance+200 where studcardid=20150031 commit transelect balance from campus_card where studcardid=20150031事务二对数据的改变影响了事物一两次读取数据的值,使读取数据产生错误 l 幻读 插入-事务一:begin tran select balance from campus_card where studcardid=20150031 waitfor delay00:00:05 select balance from campus_card where studcardid=20150031 commit tran-事务二:begin tran insert into campus_card values(20150031, 30) commit tran 删除-事务一:begin tran select balance from campus_card where studcardid=20150031waitfor delay00:00:05 select balance from campus_card where studcardid=20150031 commit tran-事务二:begin tran delete from campus_card where studcardid=20150031 commit tran3. 利用锁机制、数据库的隔离级别等,设计方案分别解决上述丢失修改、读脏数据和不可重复读(或者幻读)的数据不一致问题。(30分,每种数据不一致10分,提示可以用sp_lock系统存储过程查看当前锁状况)修改隔离级别以却确定数据的正确性:丢失修改,在SQL语句前加未提交读: set tran isolation level read uncommitted 读脏数据,在SQL语句前已提交读: set tran isolation level read committed 不可重复读,在SQL语句前可重复读: set tran isolation level repeatable eread 幻读在 SQL 语句前加可串行读: set tran isolation level serializable4. 构造一个出现死锁的情形。(10分)set tran isolation level read committed-事务 1begin tran declare read int select read=grade from sc where sno=95003 waitfor delay00:00:10 update sc set grade=read-1 where sno=95003-事务 2begin tran declare read1 int select read=grade from sc where sno=95003 update sc set grade=read1-1 where sno=950035. 利用dbcc log命令查看student数据库的事务日志。(5分) dbcc log(student, type=2)二. 实验中出现的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论