事務是乙個不可分割的操作,要麼全部執行,要麼全部不執行
保證乙個業務的完整執行。
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
'交易失敗,回滾事務
'rollback
transaction
endelse
begin
'交易成功,提交事務,寫入硬碟,永久的儲存
'commit
transaction
endgo
'檢視轉賬事務後的餘額
'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
convert(nvarchar(50),@errorcount) +'回滾
'rollback
endelse
begin
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鎖。意向排他鎖 事務在給乙個資料行加排他鎖前必...