MSSQL之事務的用法

2021-07-10 03:22:47 字數 1406 閱讀 3897

if object_id('bankinfo') is not null 

drop table bankinfo

go--銀行卡資訊表

create table bankinfo

(uid varchar(18) not null primary key,--卡號

uname varchar(20), --卡主姓名

umoney money       --卡中餘額)go

insert into bankinfo values('9559901','張三',1)

insert into bankinfo values('9559902','李四',1000)

insert into bankinfo values('9559903','王五',800)

insert into bankinfo values('9559904','趙六',50)

insert into bankinfo values('9559905','趙明',5)

select * from bankinfo

------begin transaction---------開始事務  

set implicit_transactions on  

declare @myerror int      --用於儲存錯誤號  

set @myerror=0  

set @myerror=@myerror+(select count(*) from bankinfo where uid='9559902' and umoney<800) --如果帳號餘額小於800,則將error+1 

update bankinfo set umoney=umoney-800 where uid='9559902'

set @myerror=@myerror+@@error --如果產生錯誤,則將錯誤號累加  

update bankinfo set umoney=umoney+800 where uid='9559901'  

set @myerror=@myerror+@@error --如果產生錯誤,則將錯誤號累加  

if @myerror>0  --如果執行過程出錯  

begin   

print '轉賬失敗,正準備回滾事務!'  

rollback transaction  

end  

else           --如果過程中沒有出現問題  

begin  

print '轉賬成功,準備提交事務!'    

commit transaction  

end  

------end transaction---------結束事務  

print '轉賬後的餘額'  

select * from bankinfo 

知識點 Mysql 基本用法之事務

事務用於將某些操作的多個sql作為原子性操作,一旦有某乙個出現錯誤,即可回滾到原來的狀態,從而保證資料庫資料完整性。事務例項 create table user id int primary key auto increment,name char 32 balance int insert int...

併發之事務隔離

資料庫帶來的併發問題包括 1 丟失更新 2 髒讀 3 非重複讀 4 覆蓋更新 5 幻象讀 撤銷乙個事務時,把其他事務已提交的更新資料覆蓋 a和 b事務併發執行,a事務執行更新後,提交 b事務在 a事務更新後,b事務結束前也做了對該行資料的更新操作,然後回滾,則兩次更新操作都丟失了 乙個事務讀到另乙個...

SQLServer之事務簡介

事務是單個的工作單元。事務是在資料庫上按照一定的邏輯順序執行的任務序列,既可以由使用者手動執行,也可以由某種資料庫程式自動執行。每條單獨的語句都是乙個事務。在自動提交模式下,每個資料庫操作是在執行時已提交的事務。此模式適合用於包含單個 sql 語句的許多實際的事務。不需要分隔,或者指定的這些事務完成...