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...