日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sqlserver-事务处理

發布時間:2024/4/17 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sqlserver-事务处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

事務的概念:簡單說就訪問并可能更新數據庫中各種數據項的一個程序執行單元,一旦開啟事務,所有對數據的操作要么全部執行,要么全部都不執行。單條sql語句本身就是一個事務.

事務的屬性

  事務是作為單個邏輯工作單元執行的一系列操作。一個邏輯工作單元必須有4個屬性,稱為原子性(Atomic)、 一致性(Consistent)、隔離性(Isolated)、持久性(Durable),簡稱ACID屬性,只有這樣才能構成一個事務。

  原子性:整個事務中的所有操作,要么全部完成,要么全部不完成,不可能停滯在中間某個環節。事務在執行過程中發生錯誤,會被回滾(Rollback)到事務開始前的狀態,就像這個事務從來沒有執行過一樣。

  一致性:在事務開始之前和事務結束以后,數據庫的完整性約束沒有被破壞。

  隔離性:兩個事務的執行是互不干擾的,一個事務不可能看到其他事務運行時,中間某一時刻的數據。

  持久性:在事務完成以后,該事務所對數據庫所作的更改便持久的保存在數據庫之中,并不會被回滾。

工作開發過程中對事務的依賴性很強,復雜一點的sql操作一般都離不開事務.

舉個很簡單的例子,銀行轉賬是簡單可以分為兩個步驟

如:賬號A向賬號B轉1000元錢。

1、賬號B+1000元;

2、賬號A-1000元;

這兩步是不可分的,假如賬號B+1000元后,執行第二步發現賬號A余額不足時(當然實際開發中會先判斷余額,這里是假設),執行失敗,那么賬號B就多出了1000元,而賬號A卻沒減去1000元。

有了事務我們就可以保證這兩步要么全部執行,要么全部不執行。

偽代碼:

begin 事務

  update 賬號表 set?money=money+1000 where 賬號=賬號B;

  update 賬號表 set?money=money-1000 where 賬號=賬號A;

if 程序報錯

  rollback 事務;

else

  commit 事務;

--------------------------------------------------------------------------------------------------------------------------------

sql代碼

1 create table tbl_test( 2 id nvarchar(10), 3 name nvarchar(5) 4 ); 5 insert into tbl_test values('001','名字1'); 6 update tbl_test set name='名字2' where id='001' 7 update tbl_test set name='名字超過5字' where id='001' --這句話會報錯 將截斷字符串或二進制數據。

?

上面的代碼最后執行完,會將名字1改為名字2

加上事務

1 begin transaction 2 update tbl_test set name='名字2' where id='001'; 3 update tbl_test set name='名字超過5字' where id='001'; 4 if @@error <> 0 5 begin 6 rollback transaction 7 end 8 else 9 begin 10 commit transaction 11 end

執行結果name字段的值還是名字1,第二句update執行失敗了之后,第一句update也沒有執行。

另一種寫法:T-sql是有異常機制的

1 begin try 2 begin transaction 3 update tbl_test set name='名字2' where id='001'; 4 update tbl_test set name='名字超過5字' where id='001'; 5 commit transaction 6 end try 7 begin catch 8 --select ERROR_NUMBER() as 錯誤代碼 9 rollback transaction 10 end catch

?

轉載于:https://www.cnblogs.com/fnz0/p/5444929.html

總結

以上是生活随笔為你收集整理的sqlserver-事务处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。