全球旧事资料 分类
实验七:事务与并发控制
《数据库原理》实验报告
学号
姓名
班级
2013302534杨添文
10011303
日期
20151114
实验七事务与并发控制
一、实验内容
假设学校允许学生将银行卡和校园卡进行绑定,在stude
t数据库中有如下的基本表,
其中校园卡编号cardid即为学生的学号:
icbc_cardstudcardidicbcidbala
ce校园卡ID,工行卡ID,银行卡余额
campus_cardstudcardidbala
ce
校园卡ID,校园卡余额
针对以上数据库按照要求完成下列实验:1编写一个事务处理begi
tra
实现如下的操作:某学号为20150032的学生要从银
行卡中转账200元到校园卡中,若中间出现故障则进行rollback。(15分)(1)程序代码如下:
declarebala
cei
tselectbala
cebala
ce200fromicbc_cardwherestudcardid20150032
updateicbc_cardsetbala
cebala
cewherestudcardid20150032
updatecampus_cardsetbala
cebala
ce200wherestudcardid20150032ifbala
ce0rollbackcommit
(2)结果如下:
f(结果很明显,阴影部分即显示操作已成功。)
2针对本题的数据库和表,分别用具体的例子展现四种数据不一致问题:丢失修改、读脏数据、不可重复读和幻读删除和插入。(40分,每种数据不一致10分)(1)丢失修改:代码如下:
settra
isolatio
levelreadu
committeddeclarebala
cei
tselectbala
cebala
cefromicbc_cardwherestudcardid20150031
waitfordelay000010
updateicbc_cardsetbala
cebala
ce300wherestudcardid20150031
selectbala
cefromicbc_cardwherestudcardid20150031
这段代码执行的时间设置为10秒,在此期间,重复执行这段代码(可以增加一个窗口,在10秒内执行),结果如下截图:
f很明显,若是成功修改,bala
ce中的数据就会是400,而不是700。(2)读脏数据:
代码如下:(两个事务的执行时间间隔不超过10秒)1、先编写代码执行事务1(执行一次对bala
ce的操作,回滚)
settra
isolatio
levelreadu
committedbegi
tra
updateicbc_cardsetbala
cebala
ce2000wherestudcardid20150033selectbala
cefromicbc_cardwherestudcardid20150033waitfordelay000010rollbackselectbala
cefromicbc_cardwherestudcardid20150033
这段代码的结果为:(bala
ce的值已经返回正常值,为1000)
2、执行事务2:
settra
isolatio
levelreadu
committedselectbala
ce
ffromicbc_cardwherestudcardid20150033
这段代码结果为:(结果不是1000,却是3000,说明读了脏数据)
(3)不可重复读:代码段为:(两个事务的执行时间间隔不超过10秒)1、先执行事务1:
declarebala
cei
t第一次读数据selectbala
cebala
cefromicbc_cardwherestudcardid20150032pri
tbala
cewaitfordelay000010第二次读数据selectbala
cr
好听全球资料 返回顶部