SQL Server——事務

相關語法請參考:https://blog.csdn.net/weixin_43319713/article/details/104426491

 

什麼是事務?

多個用戶同時對同一個數據進行修改。要麼只更新,要麼只添加,要麼只刪除

假設:我要更新Student表中某一個學生的信息,這個SQL語句執行的過程我們就可以分爲兩步:

第一步,刪除這個學生原來的學籍信息

第二步,把要更新的學籍信息添加進去

那麼,你有沒有思考過這樣一個問題呢?如果這個過程中的某一個步驟錯誤了,比如,刪除了原來信息,但添加時因爲某種原因卻沒有將數據添加進去,這時是不是數據就出現了缺失?那時的你將會驚慌失措,痛恨自己手抖。

這時我們就可以使用事務,必須兩個步驟都成功了表纔會發生變化,否則就恢復到表原來的狀態

 

事務的特點是什麼?

要麼都成功,要麼都失敗

 

舉例

現有一個名爲【student】的表,表內沒有任何數據,爲空

CREATE TABLE [dbo].[student](
	[SId] [int] NULL,
	[Sname] [varchar](10) NULL,
	[Sage] [varchar](10) NULL,
	[Ssex] [varchar](10) NULL,
	[民族] [varchar](50) NULL
)

需求:向表內添加學籍信息

 

一、當執行的事務中有錯誤時,返回表的初始狀態

begin tran     --開始事務
begin try      
    insert into student values('1','趙四','17','女','漢族')     --正確語句
    insert into student values('aa','趙四','17','女','漢族')    --錯誤語句
end try
begin catch      --捕捉錯誤信息
    select Error_line() as ErrorLine,           --產生錯誤的行號
           Error_message() as ErrorMessage      --錯誤原因
    if(@@TRANCOUNT>0)                           --全局變量,判斷是否開啓了事務
    rollback tran         --如果有錯誤就回滾事務
end catch
if(@@trancount>0)       
commit tran               --提交事務

select * from student     

返回結果:

 

 

二、當事務中的語句都正確時,執行成功

begin tran     --開始事務
begin try      
    insert into student values('1','趙四','17','女','漢族')     --正確語句
    insert into student values('2','趙四','17','女','漢族')    --錯誤語句
end try
begin catch      --捕捉錯誤信息
    select Error_line() as ErrorLine,           --產生錯誤的行號
           Error_message() as ErrorMessage      --錯誤原因
    if(@@TRANCOUNT>0)                           --全局變量,判斷是否開啓了事務
    rollback tran         --如果有錯誤就回滾事務
end catch
if(@@trancount>0)       
commit tran               --提交事務

select * from student     

 

三、設立保存點

作用:相當於備份保存點的數據

begin tran
insert into student values('1','王菲','17','女','漢族')    --正確語句
save tran a_point                                      --保存點a
insert into student values('2','王菲','17','女',null)     
save tran b_point                                      --保存點b
insert into student values('3','王菲','17','女','漢族')    
begin 
	rollback tran a_point     --回滾保存點b
	commit tran
end

select * from student

返回結果:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章