简单例子理解数据库事务


简单例子理解数据库事务

 

/*-- 创建表 --*/

--创建农行账户表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

简单例子理解数据库事务

 

 

你可能感兴趣的:(数据库)