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 語句的許多實際的事務。不需要分隔,或者指定的這些事務完成...