資料庫系列之T SQL(事務)

2022-02-05 02:00:31 字數 3060 閱讀 3289

事務是乙個不可分割的操作,要麼全部執行,要麼全部不執行

保證乙個業務的完整執行。

3.1 事務的分類

顯示事務:用begin transaction明確指定事務的開始,這是最常用的事務型別。

隱性事務:通過設定set implicit_transactions on 語句,將隱性事務模式設定為開啟,下乙個語句自動啟動乙個新事務。當該事務完成時,再下乙個 t-sql 語句又將啟動乙個新事務。

自動提交事務:這是 sql server 的預設模式,它將每條單獨的 t-sql 語句視為乙個事務,如果成功執行,則自動提交;如果錯誤,則自動回滾。

3.2 t-sql使用下列語句來管理事務

開始事務:begin transaction

提交事務:commit transaction

回滾事務:rollback transaction

一旦事務提交或回滾,則事務結束。

3.3 講解管理事務的三種操作語句

判斷t-sql語句是否有錯,將使用到我們曾講過的全域性變數@@error

它只能判斷當前條t-sql語句執行是否有錯(有錯返回非零值 ),而事務包含很多步操作,所以我們一般需要累計錯誤,表明整個事務是否有錯誤發生。

use

[testdb]go

/****** object: storedprocedure [dbo].[p_updatebaseinfo] script date: 02/25/2015 14:38:19 *****

*/set ansi_nulls on

goset quoted_identifier on

go--

description: 基礎資料更新的儲存過程

--事務和異常的執行方式

alter

procedure

[dbo

].[p_updatebaseinfo

]@serverip

nvarchar(4000

),

@returnmsg

nvarchar(200

) output

asset

@returnmsg=''

begin try --

異常處理

begin

tran

--開啟事務

delete

from

dbo.t_user

commit

tran

--提交事務

set@returnmsg='

更新成功

'end

try

begin

catch

rollback

tran

--事務回滾

set@returnmsg

=@returnmsg+'

更新失敗, 原因:'+

error_message()

end catch

/*

--關鍵語句講解--

*/begin

transaction

/*--定義變數,用於累計事務執行過程中的錯誤--

*/declare

@errorsum

intset

@errorsum=0

--初始化為0,即無錯誤

/*--轉賬:張三的賬戶少1000元,李四的賬戶多1000元

*/update bank set currentmoney=currentmoney-

1000

where customername='張三

'set

@errorsum

=@errorsum

+@@error

update bank set currentmoney=currentmoney+

1000

where customername='李四

'set

@errorsum

=@errorsum

+@@error

--累計是否有錯誤

if@errorsum

<>0--

如果有錯誤

begin

print

'交易失敗,回滾事務

'rollback

transaction

endelse

begin

print

'交易成功,提交事務,寫入硬碟,永久的儲存

'commit

transaction

endgo

print

'檢視轉賬事務後的餘額

'select

*from

bank

go

declare

@errorcount

intbegin

tran

set@errorcount=0

insert

into dbo.t_customer( id,name,age ) values( 1,1,'1'

) set@errorcount

=@errorcount

+@@error

update t_user set name =

null

where id =

2set

@errorcount

=@errorcount

+@@error

if@errorcount!=0

begin

print

convert(nvarchar(50),@errorcount) +'回滾

'rollback

endelse

begin

print

convert(nvarchar(50),@errorcount) +'提交

'commit

endgo

資料庫系列之T SQL(觸發器)

觸發器是一種特殊的儲存過程,只能由事件驅動呼叫,而無法直接呼叫。當對資料庫的相關物件 資料庫 表 檢視 進行某些特定的操作時,資料庫會自動呼叫相應的觸發器。無需再執行增刪改或儲存過程的操作,讓程式更自動化。3.1 觸發器的觸發方式 sql server 按觸發器被啟用的時機可分為後觸發和替代觸發兩種...

T sql之建立資料庫

建立乙個資料庫,資料庫名為testdb 在sql2005中看到的名字 create database testdbon 檔案在電腦上顯示的檔名 物理名 name testdb data,資料檔案儲存的位置注意碟符下的資料夾必須事先存在 filename d test testdb data.mdf ...

資料庫系列 資料庫事務 鎖 死鎖

保障資料庫事務的鎖 非鎖 死鎖 資料庫事務級別 事務級別的使用 注意事項 髒讀 不可重複讀 幻讀 不可重複讀 幻讀 事務的實現原理 寫鎖 讀寫鎖的公升級關係 也是產生死鎖的原因 共享鎖 獨佔鎖 意向共享鎖 事務在給乙個資料行加共享鎖前必須先取得該錶的is鎖。意向排他鎖 事務在給乙個資料行加排他鎖前必...