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

 

posted on 2014-07-06 23:11  ylbtech  阅读(269)  评论(0编辑  收藏  举报