一、有時候我們需要同時執行很多個sql操作,但是這些要執行的sql有一部分執行成功了,比如原本應該向幾個相互關聯的表中插入資料,但是只有其中乙個表的資料插入成功了,這時按照正常的邏輯,只要插入其中乙個表失敗了,那麼就應該撤銷已經成功了插入操作,這樣事務就派上用場了。
二、事務的特性
1、原子性 事務是乙個完整的操作,事務的各操作時不可分的,要麼都執行,要麼都不執行。
2、一致性 當事務完成時,資料必須處於一致狀態
3、隔離性 併發事務之間彼此隔離,獨立,它不應該以任何方式依賴與或影響其他事務。
4、永久性 事務完成後,它對資料庫的修改會永久行的儲存。、
三、事務的三個步驟
開啟事務
begin transaction
這裡是要執行的sql指令碼
if 判斷sql指令碼是否產生錯誤
如果執行sql指令碼沒有出錯,那麼就執行
commit transaction
else
如果執行sql指令碼出錯,那麼就回滾事務
rollback transaction
具體**如下:
declare三、事務的應用(在sqlserver中事務通常會結合儲存過程一起使用)@errorsum
int--
定義變數,用於累計事務執行中的錯誤
set@errorsum
=0; --
0代表無錯誤
--開啟事務
begin
transaction
begin
--sql操作
--如果sql語句發生錯誤,那麼就讓錯誤變數++
set@errorsum
=@errorsum
+@@error;--
@@error 是乙個全域性變數,只要發生執行sql語句錯誤時,@@error就會自動+1
if(@errorsum
>0)
--有錯誤就回滾事務
rollback
transaction
else
--沒有錯誤就提交事務
commit
transaction
endgo
這裡舉乙個簡單的例子:如圖是乙個簡單的表,我會寫乙個儲存過程,在儲存過程中向表中插入兩條資料,第一條會插入成功,但是第二條會出錯,出錯之後事務就會回滾,讓第一條插入sql也失敗。
用於記錄錯誤資訊的條數
begin
begin
begin
transaction
begin
insert
into usertable(_user,_pwd,score) values('
賀蘭婷','
love123
',111);--
這一條sql會成功
insert
into usertable(_user,_pwd,score) values(@_user,@_pwd,@score);--這一條sql需要在外部呼叫儲存過程時傳遞引數
--手動讓錯誤條數加1,然後下面事務就會回滾
set@error_count
=@error_count+1
;
set@error_count
=@error_count
+@@error;--
內部變數@@error 這個表示如果上一條sql語句出錯,那麼這一條sql語句就會執行,錯誤資訊條數就會增加1
if@error_count
>0--
如果錯誤資訊條數大於0 證明在執行sql的過程**現了錯誤,則應當讓事務回滾
begin
print('
插入失敗!');
rollback
transaction
endelse
begin
print('
插入成功!');
commit
transaction
endend
endend;
下面我們呼叫一下這個儲存過程
begin執行結果如下:exec testtransaction '
你好','
你好呀!
',8908
;end
當插入失敗時事務會自動回滾到初始狀態,也就是說,我們插入成功的兩條資料會失敗!
SQL Server事務的使用
例如 在關聯式資料庫中,乙個事務可以是一條sql語句,一組sql語句或整個程式 事務是恢復和併發控制的基本單位。事務應該具有4個屬性 原子性 一致性 隔離性 永續性。這四個屬性通常稱為acid特性。原子性 atomicity 乙個事務是乙個不可分割的工作單位,事務中包括的操作要麼都做,要麼都不做。一...
sql server中的 事務
begin tran update data update tb 顧客表 set 郵編 1300511 where 顧客編號 kh003 commit tran update data 在儲存過程中使用事務 判斷pro pro16儲存過程是否存在,如果存在將它刪除 if exists select ...
SQL SERVER中事務的ACID
acid,指資料庫事務正確執行的四個基本要素的縮寫。包含 原子性 atomicity 一致性 consistency 隔離性 isolation 永續性 durability 乙個支援事務 transaction 的資料庫,必需要具有這四種特性,否則在事務過程 transaction process...