從這篇開始要總結事務了,我們就從乙個簡單的事務示例開始吧。下面這個示例首先定義了乙個事務,然後把關於乙個新訂單的資料記錄到資料庫中。示例**如下:
usetsqlfundamentals2008;
go--
事務--
乙個簡單的事務
begin
tran;--
宣告乙個變數,儲存新的orderid
declare
@neworderid
asint=0
;--將乙個新訂單插入到sales.orders表中
insert
into
sales.orders
( custid ,
empid ,
orderdate ,
requireddate ,
shippeddate ,
shipperid ,
freight ,
shipname ,
shipaddress ,
shipcity ,
shipregion ,
shippostalcode ,
shipcountry
)values ( 85 , --
custid - int
5 , --
empid - int
'20090212
' , --
orderdate - datetime
'20090301
' , --
requireddate - datetime
'20090216
' , --
shippeddate - datetime
3 , --
shipperid - int
32.38 , --
freight - money
n'ship to 85-b
' , --
shipname - nvarchar(40)
n'6789 rue de l
' , --
shipaddress - nvarchar(60)
n'abbaye
' , --
shipcity - nvarchar(15)
n'reims
' , --
shipregion - nvarchar(15)
n'10345
' , --
shippostalcode - nvarchar(10)
n'france'--
shipcountry - nvarchar(15)
);
--將新的訂單id儲存到變數中
set@neworderid
=scope_identity(); --
或者@@identity
--返回新的訂單id
select
@neworderid
asneworderid;
--將新訂單的訂單明細插入到sales.orderdetails表中
insert
into
sales.orderdetails( orderid ,productid ,unitprice ,qty ,discount)
values ( @neworderid,11 ,14.00 ,12 ,0.000
), (
@neworderid,42,9.80,10,0.000
), (
@neworderid,72,34.80,5,0.000
);--
提交事務
commit
tran;
插入資料後的效果如下圖:
我們可以看到,成功插入了乙個訂單和其三筆訂單明細。
測試完成後,我們需要執行以下**清理資料。
--清理資料
delete
from sales.orderdetails where orderid>
11077
;delete
from sales.orders where orderid>
11077
;dbcc checkident('
sales.orders
',reseed,11077); --
重置標識值
乙個簡單的跨庫事務問題
來自 最近在做乙個專案,其中乙個方案涉及到跨庫事務一致性問題,是乙個簡單的場景。這個專案是對老的業務進行效能提公升,業務邏輯基本上保持不變。主要是在於新專案採用了分庫分表的設計,從而提公升了效能。考慮到專案發布之後可能存在風險,採取了新老系統的並行方案。這個系統的業務比較簡單 接收來自外部的資料,然...
Spring 在乙個事務中開啟另乙個的事務
什麼是事務?可以參考我的這篇部落格!spring boot 怎麼使用spring的事務控制機制?可以參考我的這篇部落格!通常的情況下,一般的事務直接在service類上新增 transactional註解,spring就會幫我們替所有方法自動生成事務。但是在某些情況下,很少出現的。我們希望在乙個方法...
spring 乙個簡單例項之對事務的支援
spring 對事務的支援 事務簡介 滿足一下四個條件 第一 原子性 第二 一致性 第三 隔離性 第四 永續性 程式設計式事務管理 spring 提供的事務模版類 org.springframework.transaction.support.transactiontemplate 事務管理器 or...