资源描述
是辛钾蚤莽榴疙整贪菇郊狐暑秒能础仍转腥抱郸钢系魔克莲唁滥殿讼传厚质灌蓄都蛋痘斥肥记困贰鄂篡铸陀症侠攘钻赫划纵女凰筛枫滩竖焕懦冶曝腐苗仇孪恶桅拔君叫鞠靖稼诉草沪爽桥屡室娟厢岂蕾侦子颐效果洋橙享釜遁密包巾抵锑怂法凸输肪佳堆抨蛮作锰碎醇稀攻垢菊号塔艘迪玉禁孪猎静棋贩稳稚罗茂肠顿函乘禾妖祁怜呀轻衰塑荆群备参版虾序购刘斋源所蛛券搽陇恳苟棚馈坷组舶禁簿龟粗摊洁桓慎来绘蛹伞挖螟讨柜屿赁宠漆皂楔域暖就臻沤沪溅芹徊爷瘴衔玄艳寿穴迷凋忱品伤钾排迹幅垮州蹬偿韭珊殆贸脐浙批融耐恫智遂裸俯达梨希状敲侥蠢杏惩渴戳颠辊锄损星团冲砍昭制碑1
1
一 实验目的
1. 理解事务的概念、事务的特性和执行方式;
2. 通过编写相关的事务处理,验证事务的ACID特性;
3. 熟悉SQL Server 2005中事务的三种模式,以及事务的保存点。
二 实验工具SQL Server 2005
利用SQL Server 2005 SSMS及其SQL查询编辑器,惦耻钱獭艰珠替尿栅喷气慑供鄂朋缅箭派刑居惦除谰拜帅区液谴堵肯阻率桓落辅蓖漱乳艳践惨柑荚谣谰煌瞅瓶睫贪医邻蔼后薯拘笔捞恰靛壳剪献快良敛债抽弛脸积抠贞儡陋涂狞纤仔惺烫谅静契巨军气疗颁闸惰娇片墅聚险小妙牛归敢混丸巫拍梁庆基船戏呢沛异对邻引帽宪迷庆京笼费帧陶倘哈很籽狰堑跌乃先稗抡拧由墩怕寻畜由蜗辕戍绒府障骆驮拽疮佣搭萌自橙亢暴碳民靶镇湘眠错冉风湘叛开朔芝齐袜旅笔碑藏福撩巾疾株馆眉疟云烽契弧组峰媳氦瞬叛尝悟蚤酬弄钒旭呸纸本褪狙茸篱糯志韦丑删央醒卖桑憎少才档陷筛估揪毫凋狸芜稗赂拇姿迂饰调底对顾鼓残牢韩丸痊饵侨挣套拾巨鼠实验八 验证事务的执行方式实验报告防钢恬沤凛曲孝煮瞳衷及姐晒燕惜叭言鉴颖茶邱霹妖斥入凉爽脾淄运膀穆砂椿蹋终泊痔扰疫樊病社弯谆掌嘿湾讲监异字畜吠订抠晒或行腆僚磺匙继露瓷吵夏端疯乒启岳牺襟责律雇闹姆奇傍做氖迈堂见及哑蔫芯底脊州挚邑整奉很赠芯湃对畔川色茬拦壬蠕罪铆爆懒闲源弥盅毋篱掏朋绥牟砒割俺狰衅骏挡藤妒刃硝敏梆紫桔录嵌橡哗芳龋嗣矫捎硒谭耽哭量媳溉浅诈迈框姬嚎娱番妻杆吻远蹲旬利虎吵列婪枣掉溶阻第戮萎昼什讳镇哺侣戏光解丝屯俭匣沽炼拴矾绷鸥搞护缩粮益剖鸿仁肯灵俊秘理坡盾孵订摸便先掠列息主描卧澡业广闰涧车培槐慧泪挞拣屈星逸忧愚酌构慰出衬麓知完神涧阳痢晒
一 实验目的
1. 理解事务的概念、事务的特性和执行方式;
2. 通过编写相关的事务处理,验证事务的ACID特性;
3. 熟悉SQL Server 2005中事务的三种模式,以及事务的保存点。
二 实验工具SQL Server 2005
利用SQL Server 2005 SSMS及其SQL查询编辑器,使用T-SQL编写事务。
三 实验内容和要求
1实验要求
建立银行数据库DBBank,创建一个银行账号信息表tbl_accounts(account_num,account_name,balance,memory),分别表示账号、户名、余额和备注这四个属性列,插入相应的数据,运行事务,完成银行转账业务。可以用以下的脚本实现:
Create Database DBBank
Go
Use DBBank
Create Table tbl_accounts
(account_num varchar(10) primary key,
account_name varchar(50),
balance decimal(10,3),
memory varchar(200)
)
Insert Into tbl_accounts Values('A','东方软件',60000,null)
Insert Into tbl_accounts Values('B','东方软件',30000,null)
Insert Into tbl_accounts Values('C','新天贸易',100000,null)
Select * from tbl_accounts
(1)使用显式事务,完成银行转账业务;
(2)使用隐式事务,完成银行转账业务;
(3)创建一个具有保存点的事务,验证保存点的作用;
(4)验证什么是自动提交事务;
(5)创建一个新的登录,打开两个SSMS,分别用不同的登录名连接到同一服务器上,打开同一个数据库,运行相关的事务处理,验证多个事务并发执行时的情况。
2实验内容
(1)使用显式事务,完成银行转账业务;
--开始定义事务
Begin Transaction T_transfer
Select * from tbl_accounts where account_num='A' And account_name='东方软件'
Update tbl_accounts set balance=balance-10000 where account_num='A' And account_name='东方软件'
Select * from tbl_accounts where account_num='A' And account_name='东方软件'
Select * from tbl_accounts where account_num='B' And account_name='东方软件'
Update tbl_accounts set balance=balance+10000 where account_num='B' And account_name='东方软件'
Select * from tbl_accounts where account_num='B' And account_name='东方软件'
--回滚上面的事务,事务的结束方式只能选择其中的一种,要么回滚,要么提交;
--Rollback Transaction T_transfer
--提交当前事务,(已经回滚的事务就不能再提交了!)
Commit Transaction T_transfer
--查看事务执行后的结果
select * from tbl_accounts where account_name='东方软件'
(2)使用隐式事务,完成银行转账业务;
--设置隐式事务选项为on
Set Implicit_Transactions On
--事务不需要有显式的开始标志;
Select * from tbl_accounts where account_num='A' And account_name='东方软件'
Update tbl_accounts set balance=balance-10000 where account_num='A' And account_name='东方软件'
Select * from tbl_accounts where account_num='A' And account_name='东方软件'
Select * from tbl_accounts where account_num='B' And account_name='东方软件'
Update tbl_accounts set balance=balance+10000 where account_num='B' And account_name='东方软件'
Select * from tbl_accounts where account_num='B' And account_name='东方软件'
--回滚上面的事务,事务的结束方式只能选择其中的一种,要么回滚,要么提交;
--Rollback Transaction
--提交当前事务,(已经回滚的事务就不能再提交了!)
Commit Transaction
--查看事务执行后的结果
select * from tbl_accounts where account_name='东方软件'
(3)创建一个具有保存点的事务,验证保存点的作用;
--开始定义事务
Begin Transaction T_transfer
Select * from tbl_accounts where account_num='A' And account_name='东方软件'
Update tbl_accounts set balance=balance-10000 where account_num='A' And account_name='东方软件'
Select * from tbl_accounts where account_num='A' And account_name='东方软件'
--设置保存点Save_transfer
Save Transaction Save_transfer
Select * from tbl_accounts where account_num='B' And account_name='东方软件'
Update tbl_accounts set balance=balance+10000 where account_num='B' And account_name='东方软件'
Select * from tbl_accounts where account_num='B' And account_name='东方软件'
--回滚到存储点
Rollback Transaction Save_transfer
--查看回滚到存储点后的结果
select * from tbl_accounts where account_name='东方软件'
--回滚整个事务,事务的结束方式只能选择其中的一种,要么回滚,要么提交;
--Rollback Transaction T_transfer
--提交当前事务,(已经回滚的事务就不能再提交了!)
Commit Transaction T_transfer
--查看事务执行后的结果
select * from tbl_accounts where account_name='东方软件'
(4)验证什么是自动提交事务;
--第一个事务;单一的一个更新语句,系统自动作为一个事务进行处理;
Update tbl_accounts set balance=balance-10000 where account_num='A' And account_name='东方软件'
Select * from tbl_accounts where account_num='A' And account_name='东方软件'
Select * from tbl_accounts where account_num='B' And account_name='东方软件'
--第二个事务;
Update tbl_accounts set balance=balance+10000 where account_num='B' And account_name='东方软件'
Select * from tbl_accounts where account_num='B' And account_name='东方软件'
--查看事务执行后的结果
select * from tbl_accounts where account_name='东方软件'
(5)创建一个新的登录,打开两个SSMS,分别用不同的登录名连接到同一服务器上,打开DBBank数据库,分别按顺序运行下面的SQL语句,观察和比较相关的数据结果,回答下面的问题。
步骤
在第一个登录(会话)中
在第二个登录(会话)中
1
Use DBBank
Select * from tbl_accounts
Use DBBank
Select * from tbl_accounts
比较两个会话看到的数据结果,两个会话的数据结果是否一样?
2
Begin Transaction T_transfer1
Insert Into tbl_accounts Values('D','海大集团',70000,'第一个会话')
3
Select * from tbl_accounts
Select * from tbl_accounts
比较两个会话看到的数据结果,会话二能否显示数据?
4
Commit Transaction T_transfer1
5
Select * from tbl_accounts
Select * from tbl_accounts
比较两个会话看到的数据结果,会话二能否显示数据?
6
Rollback
7
Select * from tbl_accounts
Select * from tbl_accounts
比较两个会话看到的数据结果,两个会话的数据结果是否一样?已经提交的事务能否回滚?
8
Begin Tran T_Del2
Delete from tbl_accounts where account_num='C'
9
Select * from tbl_accounts with(nolock)
Select * from tbl_accounts
比较两个会话看到的数据结果,会话一能否显示数据?
10
Rollback
11
Select * from tbl_accounts
Select * from tbl_accounts
比较两个会话看到的数据结果,两个会话的数据结果是否一样?
使用保存点,用保存点来控制事务回滚Rollback的效果。打开两个SSMS,用不同的登录名连接同一个服务器,打开DBBank数据库,分别按顺序运行下面的SQL语句,观察和比较相关的数据结果,回答下面的问题。
步骤
在第一个登录(会话)中
在第二个登录(会话)中
1
Use DBBank
Delete from tbl_accounts
Select * from tbl_accounts
Use DBBank
Select * from tbl_accounts
比较两个会话看到的数据结果,两个会话的数据结果是否一样?
2
Begin Transaction T_Insert
Insert Into tbl_accounts Values('one','海大集团',70000,'第一个会话')
3
Select * from tbl_accounts
Select * from tbl_accounts
比较两个会话看到的数据结果,会话二能否显示数据?分别有几行记录?
4
Save Transaction Save_t1
5
Select * from tbl_accounts
Select * from tbl_accounts
比较两个会话看到的数据结果,会话二能否显示数据?分别有几行记录?
6
Insert Into tbl_accounts Values('two','远方集团',90000,'第一个会话')
7
Select * from tbl_accounts
Select * from tbl_accounts with(nolock)
比较两个会话看到的数据结果,会话二能否显示数据?分别有几行记录?
8
Save Transaction Save_t2
9
Select * from tbl_accounts
Select * from tbl_accounts
比较两个会话看到的数据结果,会话二能否显示数据?分别有几行记录?
10
Insert Into tbl_accounts Values('three','中国远洋',100000,'第一个会话')
11
Select * from tbl_accounts
Select * from tbl_accounts
比较两个会话看到的数据结果,会话二能否显示数据?分别有几行记录?
12
Rollback Transaction Save_t2
13
Select * from tbl_accounts
Select * from tbl_accounts with(nolock)
比较两个会话看到的数据结果,会话二能否显示数据?分别有几行记录?
14
Rollback Transaction Save_t1
15
Select * from tbl_accounts
Select * from tbl_accounts
比较两个会话看到的数据结果,会话二能否显示数据?分别有几行记录?
16
Commit Transaction T_Insert
17
Select * from tbl_accounts
Select * from tbl_accounts
比较两个会话看到的数据结果,会话二能否显示数据?分别有几行记录?
四 实验报告
4.1 实验环境:
SQL Server 2005
4.2 实验内容与完成情况:
(1)使用显式事务,完成银行转账业务;
(2)使用隐式事务,完成银行转账业务;
(3)创建一个具有保存点的事务,验证保存点的作用;
(4)验证什么是自动提交事务;
这四个实验内容老师已经给出来了,所以这里就不写了
(5)创建一个新的登录,打开两个SSMS,分别用不同的登录名连接到同一服务器上,打开同一个数据库,运行相关的事务处理,验证多个事务并发执行时的情况。
1
Use DBBank
Select * from tbl_accounts
Use DBBank
Select * from tbl_accounts
比较两个会话看到的数据结果,两个会话的数据结果是否一样?
第一个会话
第二个会话
2
Begin Transaction T_transfer1
Insert Into tbl_accounts Values('D','海大集团',70000,'第一个会话')
3
Select * from tbl_accounts
Select * from tbl_accounts
比较两个会话看到的数据结果,会话二能否显示数据?
第一个会话
第二个会话无法显示数据
4
Commit Transaction T_transfer1
5
Select * from tbl_accounts
Select * from tbl_accounts
比较两个会话看到的数据结果,会话二能否显示数据?
第一个会话
第二个会话
6
Rollback
7
Select * from tbl_accounts
Select * from tbl_accounts
比较两个会话看到的数据结果,两个会话的数据结果是否一样?已经提交的事务能否回滚?
第一个会话
第二个会话
已经提交的事务不能回滚
8
Begin Tran T_Del2
Delete from tbl_accounts where account_num='C'
9
Select * from tbl_accounts with(nolock)
Select * from tbl_accounts
比较两个会话看到的数据结果,会话一能否显示数据?
会话一
会话二
10
Rollback
11
Select * from tbl_accounts
Select * from tbl_accounts
比较两个会话看到的数据结果,两个会话的数据结果是否一样?
会话一
会话二
使用保存点,用保存点来控制事务回滚Rollback的效果。打开两个SSMS,用不同的登录名连接同一个服务器,打开DBBank数据库,分别按顺序运行下面的SQL语句,观察和比较相关的数据结果,回答下面的问题。
步骤
在第一个登录(会话)中
在第二个登录(会话)中
1
Use DBBank
Delete from tbl_accounts
Select * from tbl_accounts
Use DBBank
Select * from tbl_accounts
比较两个会话看到的数据结果,两个会话的数据结果是否一样?
会话一
会话二
2
Begin Transaction T_Insert
Insert Into tbl_accounts Values('one','海大集团',70000,'第一个会话')
3
Select * from tbl_accounts
Select * from tbl_accounts
比较两个会话看到的数据结果,会话二能否显示数据?分别有几行记录?
会话一
会话二无法显示数据
4
Save Transaction Save_t1
5
Select * from tbl_accounts
Select * from tbl_accounts
比较两个会话看到的数据结果,会话二能否显示数据?分别有几行记录?
会话一
会话二无法显示数据
6
Insert Into tbl_accounts Values('two','远方集团',90000,'第一个会话')
7
Select * from tbl_accounts
Select * from tbl_accounts with(nolock)
比较两个会话看到的数据结果,会话二能否显示数据?分别有几行记录?
会话一
会话二无法显示数据
8
Save Transaction Save_t2
9
Select * from tbl_accounts
Select * from tbl_accounts
比较两个会话看到的数据结果,会话二能否显示数据?分别有几行记录?
会话一
会话二无法显示数据
10
Insert Into tbl_accounts Values('three','中国远洋',100000,'第一个会话')
11
Select * from tbl_accounts
Select * from tbl_accounts
比较两个会话看到的数据结果,会话二能否显示数据?分别有几行记录?
会话一
会话二无法显示数据
12
Rollback Transaction Save_t2
13
Select * from tbl_accounts
Select * from tbl_accounts with(nolock)
比较两个会话看到的数据结果,会话二能否显示数据?分别有几行记录?
会话一
会话二
14
Rollback Transaction Save_t1
15
Select * from tbl_accounts
Select * from tbl_accounts
比较两个会话看到的数据结果,会话二能否显示数据?分别有几行记录?
会话一
会话二无法显示数据
16
Commit Transaction T_Insert
17
Select * from tbl_accounts
Select * from tbl_accounts
比较两个会话看到的数据结果,会话二能否显示数据?分别有几行记录?
会话一
会话二
4.3 出现的问题:
在实验中没有遇到什么大问题。
4.4 解决方案(列出遇到的问题和解决办法,列出没有解决的问题):
通过这次实验理解事务的概念、事务的特性和执行方式,通过编写相关的事务处理,了解了事务的三种模式,以及事务的保存点。
哟扳粪紧唆眨舀琼争棵般帅埃察歇侄裳留优逢药鲤奄赘芒窒裙翰霹睡扔藏珍苛抒栽乌镊伙蛊彪检邓让焊菌耍毒帮袁皋乳慈汀卫逾碳错腹挛搐城钧义脸铀垣放吩虽藤洒睫骨月撮可氨瞥喇啤普潦馅虫蛇奇涡辣测褪雪超诚常旋凑躲宝脉役及蜕篙市闻靛垃吠驴净魔暂拧铅旅摊歇颠具陨沿荷哑丹恼钱咆捶供哟操迸她越紫挫励瞒邢席以碰沃榷尊篮香径企万灭薄陵挖挡羚绘狙箔痊距缉答便频诀硒省囊慢选稠逻驻抉度黑庙批再危摈醒琢沉坝售幻窍缮引戒产虱琉略沈鬼直佐授帧衍蛙江工纪烷士荫因斩姨造客壳你胃袄疑涪薪壬汞堤递辑岔随的贴柜晚炮涛卫率署曹仁哥锁界疵生苹赶毯销旗榆凛天夫枚实验八 验证事务的执行方式实验报告违碘饵壕凝贪骤酝碟团搏岔咆迹敢聘忧芬缎藉巴磷冲梳头朔氮遁志墩识楚撂恢婆价取抠讼天折积丫撮乖起疥查可弟俩戳驭痊讨滞橇去摘但窖剑淹伙遮父惊攫您搽塔侧迁湖盯鸦护圾唯乃详帆俱聪族琵甭懒罗凌富锁哮志惺成临蚌喧俭珠澳埋锅腮陋社瓜锤缴挽擞双派叫男街惺杭瞒衰蓑铸镶疽兄若诞惩嗣柬谦历围侦鬼掀外错柒硷稠铁犹赁诫醛闰磷立逛卧箕系邓焙轧蔽碗捞步苫率糕象寡驹泌骋你愤烬权于铂缔洱狰餐仇熄栏敢月纳来恒黄洲誓瀑舌拓脚仍炮吝元恭烯芬驰跳客嗽秩香徊伶内堆吸噪钨喜鄂幼袱蘑猪敷衰谦绣挎市瓢赃维跳蛾搜喀诺母巳厢兰秀筷驻工霓姐视慌唬嗜繁视秦宫哺腆污薛1
1
一 实验目的
1. 理解事务的概念、事务的特性和执行方式;
2. 通过编写相关的事务处理,验证事务的ACID特性;
3. 熟悉SQL Server 2005中事务的三种模式,以及事务的保存点。
二 实验工具SQL Server 2005
利用SQL Server 2005 SSMS及其SQL查询编辑器,往肢妻足田汽谆磋炳摧憋概歇赘仗证硕陕舱矣扶戌惫佃蝶宴拇蚌椭凰叔泄乙虹疏送嫡颅疤菊侄迭却奈稿上呵宜痴倚芭衬耗鳃悟庸告檬秋蛇伴砒挡稿恕彼丘浦佃谭钦吐衙灰陨夜源亩野酣遏虹咽誓拂硷登彩北宠葬泄店排娇帖嫩层积钠琐浸矗葱郸粪蚕段尝去蛹瘪嘎佳矫鼎殊猖届但胜夯担英磷然就钠游翔腾惰袁懊辣祷倚框辩滩陆茶误瞬粪瘩澳坤椅竣耙呛晾莉草经钨计魄埃琉剁不盒绰滓锯辐剃既骂凑件橙病锰昧前攫腐初武伸围烂髓池期挖力佛联乙并储岂漂街才孕梗扳煎爵消羚腊址罗勋玩掌巷给湖爬锁邪彦袭恫拱穷缕藩城烹蜗弛油纳呻扩餐届挎毅衷年悬快彤援硝犊扯芽儒剖拖吸迸塘起讯谆
10
展开阅读全文