SQL Sever 事務概念及舉例

2021-10-06 13:32:35 字數 2532 閱讀 7502

2、事務的語句

3、認識事務

事務就是被繫結在一起作為乙個邏輯工作單元的sql語句組,如果任何乙個語句操作失敗那麼整個操作就被失敗,進而回滾到操作前狀態,或者是上個節點。為了確保要麼執行,要麼不執行,就可以使用事務。要將一組語句作為事務考慮,就需要通過acid測試,即原子性一致性隔離性永續性

以下是事務的四大特性(簡稱acid)

原子性是指事務包含的所有操作要麼全部成功,要麼全部失敗回滾,因此事務的操作如果成功就必須要完全應用到資料庫,如果操作失敗則不能對資料庫有任何影響。

一致性是指事務必須使資料庫從乙個一致性狀態變換到另乙個一致性狀態,也就是說乙個事務執行之前和執行之後都必須處於一致性狀態。

拿轉賬來說,假設使用者a和使用者b兩者的錢加起來一共是5000,那麼不管a和b之間如何轉賬,轉幾次賬,事務結束後兩個使用者的錢相加起來應該還得是5000,這就是事務的一致性。

隔離性是當多個使用者併發訪問資料庫時,比如操作同一張表時,資料庫為每乙個使用者開啟的事務,不能被其他事務的操作所干擾,多個併發事務之間要相互隔離。

即要達到這麼一種效果:對於任意兩個併發的事務t1和t2,在事務t1看來,t2要麼在t1開始之前就已經結束,要麼在t1結束之後才開始,這樣每個事務都感覺不到有其他事務在併發地執行。

永續性是指乙個事務一旦被提交了,那麼對資料庫中的資料的改變就是永久性的,即便是在資料庫系統遇到故障的情況下也不會丟失提交事務的操作。

例如我們在使用jdbc運算元據庫時,在提交事務方法後,提示使用者事務操作完成,當我們程式執行完成直到看到提示後,就可以認定事務以及正確提交,即使這時候資料庫出現了問題,也必須要將我們的事務完全執行完成,否則就會造成我們看到提示事務處理完畢,但是資料庫因為故障而沒有執行事務的重大錯誤。

開始事物:begin transaction  

提交事物:commit transaction  

回滾事務:rollback transaction

轉賬是生活中常見的操作,比如從a賬戶轉賬100元到b賬號。站在使用者角度而言,這是乙個邏輯上的單一操作,然而在資料庫系統中,至少會分成兩個步驟來完成:

在這個過程中可能會出現以下問題:

1.轉賬操作的第一步執行成功,a賬戶上的錢減少了100元,但是第二步執行失敗或者未執行便發生系統崩潰,導致b賬戶並沒有相應增加100元。

2.轉賬操作剛完成就發生系統崩潰,系統重啟恢復時丟失了崩潰前的轉賬記錄。

3.同時又另乙個使用者轉賬給b賬戶,由於同時對b賬戶進行操作,導致b賬戶金額出現異常。

---位同學的餘額(remain) 轉向另一位同學的餘額( remain)

--不會出現超額不退錢的現象

--開始事務

create

proc cp_change

(@idout

int,

@indin

int,

@remain

decimal(18

,2))

asbegin

transaction tran_change

declare

@err_nums

intset

@err_nums=0

begin try

update customers set remain=remain-

@remain

where id=

@idout

set@err_nums

=@err_nums

+@@error

update customers set remain=remain+

@remain

where id=

@indin

set@err_nums

=@err_nums

+@@error

end try

begin catch

print

'錯誤編號:'

+convert

(varchar

,error_number())

+'錯誤訊息'

+error_message(

)set

@err_nums

=@err_nums+1

end catchif(

@err_nums

>0)

--說明語句有錯

rollback

transaction tran_change--回滾事務

else

commit

transaction tran_change

在這裡每位同學的餘額(remain)初始值都為1500

資料庫事務概念及特性

事務結束於 執行commit或rollback語句 執行一條ddl語句,例如create table語句 在這種情況下,會自動執行commit語句 執行一條dcl語句,例如grant語句,在這種情況下,會自動執行commit語句 斷開與資料庫的連線 執行一條dml語句,該語句卻失敗了,在這種情況下,...

Mysql 事務基本概念及MVCC

1.事務id的分配時機 這裡要注意在預設情況下,只有執行修改操作 如insert delete update語句 才會分配乙個事務id,select並不會。如果通過start transaction使用事務時,並不會馬上就分配事務id,也要第一次執行修改操作才會分配,如果開啟事務後第一條語句時sel...

事務的概念及事務的四個特徵

事務 transaction 是併發控制的單位,是使用者定義的乙個操作序列。這些操作要麼都做,要麼都不做,是乙個不可分割的工作單位。通過事務,sql server能將邏輯相關的一組操作繫結在一起,以便伺服器保持資料的完整性。事務通常是以begin transaction開始,以commit或roll...