• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

把语句组入到事务中

发布: 2007-6-30 18:56 | 作者: admin | 来源: | 查看: 15次 | 进入软件测试论坛讨论

领测软件测试网

把语句组入到事务中

假如你想在你的网站上出售商业卡。首先,为了做到这一点,你必须创建两个表格,一个表格包含了要付帐的信用卡帐号的列表。另外一个表则包含了定购产品的定单的列表。无论何时,当一个客户在访问你的站点时定购了商业卡,你需要把信息同时添入到两个表格中。

现在假设有一个访问你站点的客户定购了商业卡。首先该客户的信用卡号添加到信用卡表中。然而就在这一时刻。你Web服务器的硬盘驱动器突然坏了。该客户的定单并没有保留到产品定单表中。这就会使事情变得很糟糕。来访者的信用卡为商业卡付了账,但是确没有收到定购的产品。此时定购的客户肯定会对你的行为感到生气。你该怎样阻止该事情的发生呢?

在本节中,将会用到下面的三个语句:BEGIN TRANSACTION,COMMIT TRANSACTION和ROLLBACK TRANSACTION。一个事务(transaction)是一组语句,这组语句要么全部执行,要么全部不执行。下面就是如何使用这些语句的一个简单的例子:

BEGIN TRANSACTION

INSERT credit_cards (username,ccnumber)

VALUES(‘Andrew Jones’,’5555-55-555-55-5555’)

INSERT orders(username) VALUES (‘Andrew Jones’)

COMMIT TRANSACTION

在该例子中,我们使用BEGIN TRANSACTION 和COMMIT TRANSACTION来定义事务块.在该块中显示的语句只有在执行COMMIT TRANSACTION后才发生效用。假如在到达该语句之前的任一点发生了错误,所有在该事务中的语句都不会发生效用。比如在上面的例子中,如果你的硬盘在执行完第一个INSERT语句而在第二个语句之前发生了硬盘错误。没有数据会插入到任一表中。第一个语句会倒转回去,并不会有如何效果。

你可以使用ROLLBACK TRANSACTION语句来显式地倒转一个事务,如下所示:

BEGIN TRANSACTION

INSERT credit_cards(username,ccnumber)

VALUES(‘Andrew Jones’,’5555-55-555-55-5555’)

INSERT orders(username) VALUES(‘Andrew Jones)

IF DATENAME(dw,GETDATE())=”Tuesday”

ROLLBACK TRANSACTION

ELSE

COMMIT TRANSACTION

在上面的例子中,事务在除了星期二外的每天都递发。假如一个星期中的某一天刚好是星期二,则事务就会倒转回去,不会产生任何效果。换句话说,在在星期二不会收到任何新的定单。

注意

在和触发器一起使用时,ROLLBACK TRANSACTION命令特别有用。参看下面的“结合触发器和事务过程”部分。

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网