事務的創(chuàng)建與使用

事務的概念及要求
  • 事務(transaction)是作為單個邏輯工作單元執(zhí)行的一系列操作贺归。
  • 多個操作作為一個整體向系統(tǒng)提交淆两,要么都執(zhí)行,要么都不執(zhí)行拂酣。
  • 事務是一個不可再分割的工作邏輯單元秋冰。
銀行轉(zhuǎn)賬過程就是一個事務
  • 它需要兩條update語句來完成,這兩條語句是一個整體婶熬。
  • 如果其中任一條出現(xiàn)錯誤,則整個轉(zhuǎn)賬業(yè)務也取消盯另,兩個賬戶中的余額應恢復到原來的數(shù)據(jù)商蕴,從而確保轉(zhuǎn)賬前和轉(zhuǎn)賬后的余額不變。
事務的特性
  • 原子性:事務是一個完整的操作,事務的各步操作是不可分割的,要么都執(zhí)行决采,要么都不執(zhí)行。
  • 一致性:當事務完成時,數(shù)據(jù)必須處于一致狀態(tài)厨埋。
  • 隔離性:并發(fā)事務之間彼此隔離、獨立,它不應該以任何方式依賴于或影響其他事務据悔。
  • 永久性:事務完成后群嗤,它對數(shù)據(jù)的修改被永久保存。
事務的分類
  • 顯式事務:用BEGIN TRANSACTION明確指定事務的開始破衔,最常用的事務類型。
  • 隱性事務:通過設(shè)置SET IMPLICIT_TRANSACTION ON語句,將隱性事務模式設(shè)置為打開,其后的T-SQL語句自動啟動一個新事務盼砍。提交或回滾一個事務后,下一個T-SQL語句又將啟動一個新事務。
  • 自動提交事務:SQLServer的默認模式觉渴;每條單獨的T-SQL語句視為一個事務踢京。
使用SQL語句管理事務的基本步驟
--開始事務
BEGIN TRANSACTION
--提交事務
COMMIT TRANSACTION
--回滾(撤銷)事務
ROLLBACK TRANSACTION

事務處理的關(guān)鍵問題:對事務中的insert、update蹬屹、delete語句實時跟蹤

判斷某條語句執(zhí)行是否出錯的方法
  • 使用全局變量@@ERROR
  • @@ERROR只判斷當前一條T-SQL語句執(zhí)行是否有錯
  • 為了判斷事務中所有的T-SQL語句是否有錯,可以對錯誤進行累計
use StudentManageDB
go
declare @errorSum int--定義變量,用于累計事務執(zhí)行中的錯誤
set @errorSum=0 --初始化為,代表沒有錯誤
begin transaction
    begin
        --轉(zhuǎn)出
        update CardAccount set CurrentMoney-1000 where StudentId=100001
        set @errorSum=@errorSum+@@ERROR
        --轉(zhuǎn)入
        update CardAccount set CurrentMoney+1000 where StudentId=100002
        set @errorSum=@errorSum+@@ERROR --累計是否有錯誤
        if(@errorSum>0)
            rollback transaction
        else
            commit transaction
    end
go
事務的應用
--編寫存儲過程,實現(xiàn)學員一卡通轉(zhuǎn)賬功能,要求用戶輸入轉(zhuǎn)入和轉(zhuǎn)出的金額和賬戶
use StudentManageDB
go
if exists(select * from Sysobjects where name='usp_TransferAccounts')
    drop procedure usp_TransferAccounts
go
create procedure usp_TransferAccounts
@inputAcount int,--轉(zhuǎn)入賬戶
@outputAccount int, --轉(zhuǎn)出賬戶
@transferMoney int --交易金額
as
    declare @errorSum int--定義變量完慧,用于累計事務執(zhí)行中的錯誤
    set @errorSum=0 --初始化為册着,代表沒有錯誤
    begin transaction
    begin
        --轉(zhuǎn)出
        update CardAccount set CurrentMoney-@transferMoney where StudentId=@outputAccount
        set @errorSum=@errorSum+@@ERROR
        --轉(zhuǎn)入
        update CardAccount set CurrentMoney+@transferMoney where StudentId=@inputAcount
        set @errorSum=@errorSum+@@ERROR --累計是否有錯誤
        if(@errorSum>0)
            rollback transaction
        else
            commit transaction
    end
go
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市是辕,隨后出現(xiàn)的幾起案子疙教,更是在濱河造成了極大的恐慌伞租,老刑警劉巖葵诈,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件窖贤,死亡現(xiàn)場離奇詭異贰锁,居然都是意外死亡主之,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進店門夯接,熙熙樓的掌柜王于貴愁眉苦臉地迎上來逊拍,“玉大人,你說我怎么就攤上這事萧锉》溃” “怎么了?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵不恭,是天一觀的道長叶雹。 經(jīng)常有香客問我,道長换吧,這世上最難降的妖魔是什么折晦? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮沾瓦,結(jié)果婚禮上满着,老公的妹妹穿的比我還像新娘谦炒。我一直安慰自己,他們只是感情好风喇,可當我...
    茶點故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布宁改。 她就那樣靜靜地躺著,像睡著了一般魂莫。 火紅的嫁衣襯著肌膚如雪还蹲。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天耙考,我揣著相機與錄音谜喊,去河邊找鬼。 笑死琳骡,一個胖子當著我的面吹牛锅论,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播楣号,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼最易,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了炫狱?” 一聲冷哼從身側(cè)響起藻懒,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎视译,沒想到半個月后嬉荆,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡酷含,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年鄙早,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片椅亚。...
    茶點故事閱讀 40,912評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡限番,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出呀舔,到底是詐尸還是另有隱情弥虐,我是刑警寧澤,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布媚赖,位于F島的核電站霜瘪,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏惧磺。R本人自食惡果不足惜颖对,卻給世界環(huán)境...
    茶點故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望磨隘。 院中可真熱鬧惜互,春花似錦布讹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至坑鱼,卻和暖如春膘流,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鲁沥。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工呼股, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人画恰。 一個月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓彭谁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親允扇。 傳聞我的和親對象是個殘疾皇子缠局,可洞房花燭夜當晚...
    茶點故事閱讀 45,922評論 2 361

推薦閱讀更多精彩內(nèi)容

  • java事務的處理 轉(zhuǎn) https://www.cnblogs.com/Bonker/p/5417967.html...
    小小的Jobs閱讀 1,408評論 0 1
  • 事務就是要保證一組數(shù)據(jù)庫操作,要么全部成功考润,要么全部失敗狭园。在 MySQL 中,事務支持是在引擎層實現(xiàn)的糊治。MySQL...
    itczl閱讀 1,003評論 0 0
  • 一唱矛、事務概念 事務是一種機制、是一種操作序列井辜,它包含了一組數(shù)據(jù)庫操作命令绎谦,這組命令要么全部執(zhí)行,要么全部不執(zhí)行粥脚。因...
    清茶了了_閱讀 364評論 0 1
  • 1. 簡介 1.1 什么是 MyBatis 窃肠? MyBatis 是支持定制化 SQL、存儲過程以及高級映射的優(yōu)秀的...
    笨鳥慢飛閱讀 5,532評論 0 4
  • 事務(Transaction)是數(shù)據(jù)庫區(qū)別于文件系統(tǒng)的重要特性之一阿逃。 在文件系統(tǒng)中铭拧, 如果正在寫文件赃蛛, 但是操作系...
    好好學習Sun閱讀 1,019評論 0 5