实验八 索引游标及事务

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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语句创建存储过程

相关文档
最新文档