实验八 索引游标及事务
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验八索引、游标和事务
一、实验目的
1、掌握利用企业管理器和T——SQL语句创建和删除索引的两种方法。
2、了解游标的使用过程
3、掌握事务的控制语句
二、实验要求
1、能认真独立完成实验内容;
2、实验前做好上机实验的准备,针对实验内容,认真复习与本次实验有关的知识,完成实
验内容的预习准备工作;
三、实训操作及流程分析
前三项内容参看实验七
(四)事务的使用
所谓事务(Transaction ),是指一个操作序列,这些操作序列要么都被执行,要么都不被执行,它是一个不可分割的工作单元。
对事务进行管理的语句有如下几句:
语句: begin transaction
开始一个事务
语句: commit transaction
完成一个事务(提交)
语句:rollback transaction
取消一个事务(退回)
例8-4:将课程号为001的全部记录改为课程号为22
begin tran
update course set Cno=22 where Cno=001
if @@error<>0
begin
rollback tran
print '修改课程表失败'
end
else
begin
update SC set Cno=22 where Cno=001
if @@error<>0
begin
rollback tran
print '修改成绩单失败'
end
else
begin
commit tran
print '修改成功'
end
end
(提示:关于@@ERROR全局变量的解释,如果最后的Transact-SQL 语句执行成功,则@@ERROR 系统函数返回0;如果此语句产生错误,则@@ERROR 返回错误号。也就意味着,每一个Transact-SQL 语句完成时,@@ERROR 的值都会改变。)
其实例8-4的事务的上述写法还有一定问题,既是course表中先修课程号cpno还没有做相应修改,所以应完成的代码如下:
begin tran
update course set Cno='22' where Cno='0001'
if @@error<>0
begin
rollback tran
print '修改课程表失败'
end
else
begin
update Course set Cpno='22' where Cpno='0001'
if @@error<>0
begin
rollback tran
print '修改课程表失败'
end
else
begin
update SC set Cno='22' where Cno='0001'
if @@error<>0
begin
rollback tran
print '修改成绩表失败'
end
else
begin
commit tran
print '修改成功'
end
end
end
例8-5银行业务数据库bankdb,其中,帐户信息表(bank)存放帐户的信息,交易信息表(transInfo)存放每次的交易信息。试用事务解决银行转帐问题
张三转账200元给李四
分析:在bank表中需要完成的操作为两处,
张三的当前金额减200;李四的当前金额加200
在transInfo表中需要完成的操作为两处,
插入cardID为10010001的一条支取200的记录
插入cardID为10010001的一条存入200的记录
代码如下:
begin tran
update bank set CurrentMoney = CurrentMoney-200 Where CardID='10010001'
if @@error<>0
rollback tran
else
begin
update bank set CurrentMoney = CurrentMoney+200 Where CardID='10010002'
if @@error<>0
rollback tran
else
begin
Insert into transInfo Values('10010001',getdate(),'支取',200)
if @@error<>0
rollback tran
else
begin
Insert into transInfo Values('10010002',getdate(),'存入',200)
if @@error<>0
rollback tran
else
begin
commit tran
print '交易成功'
end
end
end
end
当一个用户的金额减少时需要注意不能使得金额为负,则需要当金额为负时回滚此操作,代码如下:
begin tran
update bank set CurrentMoney = CurrentMoney-2000 Where CardID='10010001'
declare @num money
select @num=CurrentMoney From bank where CardID='10010001'
if @num<0
begin
rollback tran
print '钱数为负!'
end
else
begin
commit tran
print '修改成功!'
end
四、练习
1、编写一个事务,更改学号为“2010011243”的学生的学号为“2010011244”
2、编写一个事务,银行转账交易,李四转账给张三100元
五、创建与执行存储过程
(1)用T-SQL语句创建存储过程