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 事务例子的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 对Coverage进行编辑
- 下一篇: vs2005 无法加载服务器控件解决办法