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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

sqlserver 事务例子

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

事務是實現原子性的手段,原子性是指某些事情要么全部發生,要么都不發生,我們都知道,程序的執行是有順序的,在程序的執行過程中,難免會出現錯誤,如果對于某些必須作為原子性事務發生的事,在執行過程中,有一部執行了,還有另外一部分由于某種錯誤而沒有執行,就會出現大麻煩。大部分的數據庫書都會舉這個例子,如果Alina在她的帳號A上取走了1000元,存在帳號B上,我們一般都會這么寫

update checking set A=A-1000 where CountName='Alina'

update saving set B=B+1000 where CountName='Alina'

但如果第一條語句執行了,而第二條沒有執行,那么就會有問題了,我們現在希望這兩條語句要么都執行,要么都不執行,這就要用到事務了。

下面我就舉一個小例子幫大家理解一下。

首先我們來建一個測試表

create table MyTranTest
(
?? OrderID int primary key identity
)

現在我們寫一些代碼來測試一下
begin tran TranStart
insert into MyTranTest default values
save tran FirstPoint
insert into MyTranTest default values
rollback tran FirstPoint
insert into MyTranTest default values
save tran SecondPoint
insert into MyTranTest default values
rollback tran SecondPoint
insert into MyTranTest default values
commit tran TranStart

然后我們在使用 select * from MyTranTest

結果如下:

也許你就會納悶了,明明是五條Insert語句,怎么只執行了三條。

那我們就一起看一下吧

begin tran TranStart

現在是開始事務的時候,這開始了“要么全部,要么全不”的語句組合,然后是Insert一行,在這個結合點,只有一條語句被插入,下一步創建一個保存點,名為FirstPoint,然后在插入另一行,在這時已經有兩行被插入了,但記住,他們都尚未被提交,因此數據庫并不把他們作為數據庫的一部分。

接下來是Rollback操作,說明白一點,并不是回滾到起始點,而是回滾到FirstPoint。通過這次回滾,在進行Rollback時刻和FirstPoint保存點之間的每件事情都被撤銷?,F在你應該明白了表中為什么只有三條數據了吧,下面的兩個過程跟上面的一樣,最后我們調用Committed tran語句,他鎖住我們的事務,讓他成為數據庫歷史的永久部分。

轉載于:https://www.cnblogs.com/wolfcool/archive/2009/06/11/1501004.html

總結

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

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