儲存過程與事務案例

2021-07-24 13:01:30 字數 1485 閱讀 7761

create proc proc_takemoney

@cardid1 varchar(20), 

--匯款賬號

@pwd int , --匯款密碼

@takemoney money, --匯款金額

@cardid2 varchar(20) --存款賬號

asset nocount on

declare @err int

set @err = 0

if exists(select 1 from cardinfo where cardid = @cardid1 and pass = @pwd)

begin

begin tran --事物開始

update cardinfo set balance = balance + @takemoney where cardid = @cardid2 --接受款帳戶加上@takemoney

set @err = @err + @@error

update cardinfo set balance = balance - @takemoney where cardid = @cardid1 --匯款帳戶減去@takemoney

set @err = @err + @@error

insert into transinfo(transdate,cardid,transtype,transmoney) values(default,@cardid1,'支取',@takemoney)

set @err = @err + @@error

insert into transinfo(transdate,cardid,transtype,transmoney) values(default,@cardid2,'存入',@takemoney)

set @err = @err + @@error

select top 2 * from transinfo order by transdate desc

if(@err<>0)

begin

rollback tran --錯誤回滾事物

endelse

begin

commit tran 

--無錯誤提交事物

endend --if結束

else

begin

print '密碼錯誤'

end

declare @cardid1 varchar(20),@cardid2 varchar(20),@pwd int,@takemoney money

set @cardid1 ='1010 3576 1234 5678' --張三卡號

set @pwd = 888888 --張三密碼

set @cardid2 ='1010 3576 1212 1134' --李四卡號

set @takemoney =20 --匯款金額

exec proc_takemoney @cardid1 ,@pwd,@takemoney,@cardid2

事務與儲存過程

1 事務的概念 就是為了防止任意一條資料出現異常的情況下沒有執行,則導致兩個賬戶的金額不同步造成錯誤的情況下,所謂的事務就是針對資料庫的一組操作,他可以有一條或者多條語句組成,同乙個事務操作具備同步性。也就是說,事務中的語句要麼就執行,要麼都不執行。在資料庫使用事務的時候,我們就是要開啟事務 1 s...

mysql 儲存過程與事務

最近在工作中要實現乙個功能,在乙個php檔案裡有乙個流水號的變數,每次執行這個php的檔案,這個流水號的變數都得不一樣,我就想到用mysql的自增來解決,我寫了乙個儲存過程,create procedure mqsearch in userid int,in type int,out lshs bi...

Mysql儲存過程案例

刪除drop procedure if exists p house set premit 建立獲取房間最低 和統計房間數儲存過程 delimiter create definer dev stand admin procedure p house set premit in in house in...