ylb:事务

ylbtech_sqlserver

复制代码
create database bank
go

use bank
go

create table users
(
    uid int primary key identity(1,1),
    uname varchar(10) not null,
    balance float 
)
go

insert into users values('zzl', 1000)
insert into users values('zsy', 1000)

select * from users

--创建一个事物,实现zsy转账500给zzl
/*
update users set balance = balance + 500
where uname = 'zzl'

update users set balance = balance - 500
where uname = 'zzz'*/

BEGIN TRANSACTION
DECLARE @n1 int
DECLARE @n2 int

update users set balance = balance + 500
where uname = 'zzl'
SET @n1 = @@ROWCOUNT

update users set balance = balance - 500
where uname = 'zsy'
SET @n2 = @@ROWCOUNT

IF @n1 >= 1 and @n2 >= 1
BEGIN
    COMMIT
    PRINT '转账成功'
END
ELSE
BEGIN
    ROLLBACK
    PRINT '转账失败!!'
END

select * from users

--避免透支----------------------------------

BEGIN TRANSACTION
DECLARE @n1 int
DECLARE @n2 int
DECLARE @bal float  --保存班长支出以后的余额

update users set balance = balance + 500
where uname = 'zzl'
SET @n1 = @@ROWCOUNT

update users set balance = balance - 500
where uname = 'zsy'
SET @n2 = @@ROWCOUNT

IF @n1 >= 1 and @n2 >= 1
BEGIN
/*
    COMMIT
    PRINT '转账成功'
*/
    --如果zsy-500为负,就回滚事务
    select @bal =  balance from users where uname = 'zsy'
    IF @bal < 0
    BEGIN
        PRINT '班长余额不足,转账失败'
        ROLLBACK
    END
    ELSE
    BEGIN
        PRINT '转账成功'
        COMMIT
    END
END
ELSE
BEGIN
    ROLLBACK
    PRINT '转账失败!!'
END

select * from users
复制代码

 

分类:  SQL Server
本文转自ylbtech博客园博客,原文链接:http://www.cnblogs.com/ylbtech/p/3828814.html ,如需转载请自行联系原作者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值