SQLServer 事务-银行转账问题

事务(Transaction)

属性

  • 原子性(Atomicity) 事务必须是原子工作单元。对于其数据修改,要么全都执行,要么全都不执行

  • 一致性(Consistency 事务在完成时,必须使所有的数据都保持一致状态

  • 隔离性(Isolation) 由并发事务所做的修改必须与任何其他并发事务所做的修改隔离

  • 持久性(Durability ) 事务完成之后,它对于系统的影响是永久性的。


创建银行表代码

--创建表
if exists(select * from bank )
drop table bank
create table bank
(
  名字 char(10),
  钱包 int
)
go
--添加约束:钱包不能少于0元
alter table bank
add constraint ck_钱包 check (钱包>=0)
go
--插入数据:张三账户余额为1000元,李四账户余额为1元
insert into bank values ('张三',1000),('李四',1);
go
--查看结果
select *  from bank

建表和建事务的代码块可以复制在一起啦 ctrl+c

直接crtl+A运行没问题😍

创建银行转账事务

go
begin transaction 
 --定义,用于累计事务执行过程中的错误
declare @errorSum int 
set @errorSum=0    --初始化为0,即默认代表无错误
 
update bank set 钱包=钱包-1000 where 名字='张三'
    set @errorSum=@@ERROR+@errorSum 
update bank set 钱包=钱包+1000 where 名字='李四'
    set @errorSum=@@ERROR+@errorSum 
    
print '查看转账后的账户'
select *  from bank

--回滚意味着撤销尚未保存到物理数据库中的操作
if @errorSum<>0    --非零
    begin
        print '交易失败,回滚事务'    
        rollback transaction 
    end
else
    begin
        print '交易成功,提交事务,写入硬盘,永久的保存'
        commit transaction 
    end        
go
print '查看转账事务后的余额'    
select * from bank
go

运行结果

屏幕前的程序猿们,你们的赞就是我坚持的动力

苦尽甘来的那一天,山月星河都为你化作赞礼!

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值