当前位置:操作系统 > Unix/Linux >>

简单例子理解数据库事务

简单例子理解数据库事务
 
简单例子理解数据库事务
[sql] 
/*-- 创建表 --*/  
--创建农行账户表bank  
if exists(select * from sysobjects where name='bank')  
    drop table bank  
go  
create table bank  
(  
    customerName char(10),      --顾客姓名  
    currentMoney money          --当前余额  
)  
/*-- 添加约束:根据银行规定,账户余额不能少于1元,否则视为销户 --*/  
alter table bank  
add constraint CK_currentMoney check(currentMoney>=1)  
/*-- 插入测试数据:张三开户,开户金额为800,李四开户,开户金额1 --*/  
insert into bank(customerName,currentMoney) values('张三',1000)  
insert into bank(customerName,currentMoney) values('李四',1)  
--查看结果  
select * from bank  
go  
  
/*-- 转账测试:张三希望通过转账,直接汇钱给李四1000元 --*/  
set nocount on --不显示受影响的行数信息  
print '查看转账事务前的余额'  
select * from bank  
go  
/*-- 开始事务 --*/  
begin transaction  
/*-- 定义变量,用于累计事务执行的过程中的错误 --*/  
declare @errorSum int  
set @errorSum=0     --初始化为0,即无错误  
/*-- 转账 --*/  
update bank set currentMoney=currentMoney-1000 where customerName='张三'  
set @errorSum=@errorSum+@@error     --累计是否有错误  
update bank set currentMoney=currentMoney+1000 where customerName='李四'  
set @errorSum=@errorSum+@@error     --累计是否有错误  
  
print '查看转账事务过程中的余额'  
select * from bank  
  
/*-- 根据是否有错误,确定事务是提交还是撤销 --*/  
if @errorSum<>0       --如果有错误  
    begin  
        print '交易失败,回滚事务'  
        rollback transaction  
    end  
else  
    begin  
        print '交易成功,提交事务,写入硬盘,永久保存'  
        commit transaction  
    end  
  
print '查看转账事务后的余额'  
select * from bank  
go  

 

 
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,