实验报告六 数据库事务及并发控制.doc

上传人:苏美尔 文档编号:6079511 上传时间:2020-09-06 格式:DOC 页数:8 大小:239.50KB
返回 下载 相关 举报
实验报告六 数据库事务及并发控制.doc_第1页
第1页 / 共8页
实验报告六 数据库事务及并发控制.doc_第2页
第2页 / 共8页
实验报告六 数据库事务及并发控制.doc_第3页
第3页 / 共8页
实验报告六 数据库事务及并发控制.doc_第4页
第4页 / 共8页
实验报告六 数据库事务及并发控制.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《实验报告六 数据库事务及并发控制.doc》由会员分享,可在线阅读,更多相关《实验报告六 数据库事务及并发控制.doc(8页珍藏版)》请在三一文库上搜索。

1、 数据库原理实验报告实验名称:数据库事务及并发控制班级名称:级计算机科学与技术数学与计算机学院2015年5月10日一、实验目的:事务处理及其并发控制是所有数据库产品的一个关键问题,是提供数据一致性和可恢复性的重要保障,事务处理方式的不同会导致数据库性能和功能上的巨大差异,熟练掌握数据库事务处理和并发控制的基本原理对于后续的学习和工作有着重要的帮助。1). 通过试验,加深学生对事务的基本概念理解语掌握;2). 通过试验,加深学生对并发控制的基本概念理解,认识不正确的并发控制所带来的危害;3). 通过试验,加深学生对锁的基本概念的掌握与理解,认识锁带来的问题;二、实验内容:1、内容:事务的控制2、

2、内容:事务的隔离级别试验3、内容:锁的模拟三、实验步骤:1、SQL Server 事务模式(1)自提交事务模式 (SQL Server 默认模式):建立一个查询后,分别运行多条插入、修改与删除语句,观察表中数据的变化select *from SC1insert into sc1 (sno, cno, grade) values (2011108001, C002, 74)insert into SC1(SNO,CNO ,GRADE )values(2011108011,C003,72)insert into sc1 (sno, cno, grade) values (2011108009, C

3、004, 89)select *from SC1update SC1 set CNO =C001 where SNO=2011108001select *from SC1delete from SC1 where SNO =2011108011select *from SC1(2)隐式事务模式:设置SQL Server为隐式事务模式,分别运行多条插入、修改与删除语句以后,再执行commit或rollback,观察表中数据的变化。begin transelect *from SC1insert into sc1 (sno, cno, grade) values (2011108001, C002

4、, 74)insert into SC1(SNO,CNO ,GRADE )values(2011108011,C003,72)insert into sc1 (sno, cno, grade) values (2011108009, C004, 89)update SC1 set CNO =C001 where SNO=2011108001delete from SC1 where SNO =2011108011commit transelect *from SC1(3) 显示事务模式:用begin trancommit 和begin tranrollback,启动事务和结束事务,观察表中数据

5、的变化。begin transelect *from SC1insert into sc1 (sno, cno, grade) values (2011108001, C002, 74)insert into SC1(SNO,CNO ,GRADE )values(2011108011,C003,72)insert into sc1 (sno, cno, grade) values (2011108009, C004, 89)update SC1 set CNO =C001 where SNO=2011108001delete from SC1 where SNO =2011108011comm

6、it transelect *from SC1begin transelect *from SC1insert into sc1 (sno, cno, grade) values (2011108001, C002, 74)insert into SC1(SNO,CNO ,GRADE )values(2011108011,C003,72)insert into sc1 (sno, cno, grade) values (2011108009, C004, 89)update SC1 set CNO =C001 where SNO=2011108001delete from SC1 where

7、SNO =2011108011rollback transelect *from SC12、事务的控制数据准备:执行如下命令Select * into stu from student,将student的数据倒入到stu表中。(1)启动一个事务,执行删除后,回滚事务,具体步骤如下:选择stu的数据,察看记录总数select *from stu显式启动事务begin tran删除stu表的数据delete from Stu where sno=2012108001选择stu中数据,察看记录总数select *from stu回滚事务rollback选择stu中数据,察看记录总数select *f

8、rom stu(2)启动事务,执行删除后,提交事务,具体步骤如下:选择stu数据,察看记录总数select *from stu显式启动事务begin tran删除stu表的数据delete from Stu where sno=2012108002选择stu的数据,察看记录总数select *from stu提交事务commit选择stu数据,察看记录总数select *from stu(3)比较这两次执行效果的差异,为什么会有这些差异?3、事务的隔离级别试验数据准备:执行如下命令Select * into stu from student,将student的数据倒入到stu表中。(1)脏读,

9、具体步骤如下:建立两个查询窗口,分别叫A、B在A中,选择stu表中数据,察看记录总数Select *from stu在A中,显式启动事务Begin tran在A中,删除stu表的数据delete from stu where SNO=2012108001在A中,选择stu数据,察看记录总数Select *from stu在B中,将事务隔离级别设为UNCOMMITTEDSet transaction isolation level read uncommitted 在B中,选择stu表数据,察看记录总数Select *from stu在A中,回滚事务rollback在A中,选择stu数据,察看记

10、录总数Select *from stu在B中,选择stu数据,察看记录总数Select *from stu观察结果,为什么会有这些现象?(2)不可重复读建立两个查询窗口,分别叫A、B在A中,显式启动事务,察看classno= 201301的记录(注意classno中的数据)begin transelect *from stu where Classno=20131080在B中,显式启动事务,察看classno= 20131080的记录(注意classno中的数据)begin transelect *from stu where Classno=20131080在B中,将classno= 201

11、21080中的班级更新为20131080update stu set Classno=20131080 where Classno=20121080在B中,再次察看classno= 20131080的记录(注意classno中的数据)select *from stu where Classno=20131080在B中,提交事务commit在A中,再次察看将classno= 201301的记录(注意classno中的数据)select *from stu where Classno=20131080在A中,提交事务commit观察结果,为什么会有这些现象?(3)丢失修改建立两个查询窗口,分别叫A

12、、B在A中,显式启动事务,察看classno= 201301的记录(注意classno中的数据)begin transelect *from stu where Classno=20131080在B中,显式启动事务,察看classno= 201301的记录(注意classno中的数据)begin transelect *from stu where Classno=20131080在B中,将classno= 201301中的班级更新为201305update stu set Classno=20121080 where Classno=20131080在B中,提交事务commit在A中,再次察

13、看classno= 201301的记录(注意classno中的数据)select *from stu where Classno=20131080在A中,将classno= 201301中的班级更新为201308update stu set Classno =201308 where Classno =20131080 在A中,提交事务commit在A,B窗口分别察看classno= 201301的记录,结果如何,为什么?Select *from stu where classno= 201310804、锁的模拟建立两个查询窗口,分别叫A、B在A中,显式启动事务,察看classno= 2013

14、01的记录begin transelect *from Stu where classno= 20131080在B中,显式启动事务,察看classno= 201301的记录begin transelect *from Stu where classno= 20131080在B中,将classno= 201301中的班级更新为201305update stu set Classno=201305 where classno= 20131080在A中,将classno= 201301中的班级更新为201305update stu set Classno=201305 where classno= 20131080观察A窗口的结果,为什么?在B中,提交事务commit观察A窗口的结果,为什么?在A窗口,再次察看classno= 201301中的班级更新为201305的记录,结果如何,为什么?select *from stu where Classno=201305四、实验总结

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1