文档详情

数据库事务实例.doc

发布:2017-05-12约1.53千字共3页下载文档
文本预览下载声明
什么是数据库事务? 数据库事务是指作为单个逻辑工作单元执行的一系列操作。具体表现为:可以将几个sql语句作为一个整体来执行,这些sql语句当有一条执行出错时,那么所有的sql语句都将执行失败。也就是这些sql语句作为一个整体,要么全部执行成功,要么全部执行失败。使用事务能便于恢复数据,保证数据的一致性。 一 事务的属性 事务具有ACID属性 即 Atomic原子性, Consistent一致性, Isolated隔离性, Durable永久性 原子性 就是事务应作为一个工作单元,事务处理完成,所有的工作要么都在数据库中保存下来,要么完全回滚,全部不保留 一致性 事务完成或者撤销后,都应该处于一致的状态。 隔离性 多个事务同时进行,它们之间应该互不干扰。事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。 永久性 事务提交以后,所做的工作就被永久的保存下来 事务实例: create?procedure?TransferMoeny ( ????@FromAccountNo?varchar(50),--?转出账号 ????@ToAccountNo?varchar(50),--转入账号 ????@MoneyCount?money--转账金额 ) as --判断账号是否存在 if?exists?(select?1?from?帐户表?where?账号?=?@FromAccountNo)? begin ????if?exists?(select?1?from?帐户表?where?账号?=?@ToAccountNo)? ????begin ????????--判断转出金额是否大于当前余额 ????????if?(select?当前余额?from?帐户表?where?账号?=?@FromAccountNo)?=?@MoneyCount ????????begin ????????????--开始转账 ????????????begin?transaction ????????????insert?into?[存取记录表]?([账号],[存取类型],?[存取金额])?values(@FromAccountNo,?-1,@MoneyCount) ????????????if?@@error??0 ????????????begin ????????????????rollback?transaction--发生错误则回滚事务,无条件退出l ????????????????return ????????????end ???????????????????????insert?into?[存取记录表]?([账号],[存取类型],?[存取金额])?values(@ToAccountNo,?1,@MoneyCount) ????????????if?@@error??0 ????????????begin ????????????????rollback?tran ????????????????return ????????????end ????????????commit?transaction?--两条语句都完成,提交事务 ????????end ????????else???? ????????????raiserror?(转账金额不能大于该账号的余额,16,1) ????end ????else ????raiserror?(转入账号不存在,16,1) end else ????raiserror?(转出账号不存在,16,1)
显示全部
相似文档