0
可以說,我們對Order_Header和Order_LineItems表有一個通常的情況。 另外,可以說我們有創建,更新和選擇訂單的交易。像:訂單標題的訂單行交易的正確隔離級別是什麼?
創建:
BEGIN TRANSACTION
INSERT INTO Order_Headers...
SET @Id = SCOPE_IDENTITY()
INSERT INTO Order_LineItems...(using @Id)
DECLARE @SomeVar INT
--just example to show update dependant on select
SELECT @SomeVar = COUNT(*) Order_Headers
WHERE OrderDate > '1-1-2017'
UPDATE Order_Headers
SET SomeValue = @SomeVar
WHERE Id = @Id
COMMIT
END TRANSACTION
在另一方面,我們有交易,獲得訂單的基礎上的一些標準,爲簡單起見,可以說,過去的10:
SELECT TOP 10 * FROM Order_Headers
ORDER BY Id DESC
可能有人請說什麼是每個交易的正確隔離等級,並且很快解釋爲什麼?
[更新]
我要確保沒有其他用戶可以插入的行匹配 WHERE訂購日期> '2017年1月1日'
我也要打確保第二個事務(純粹的選擇訂單)從不選擇在第一個事務中未完全「完成」的行。意思是那些在事務中創建的INSERT部分,但尚未在UPDATE部分中更新。 (我想這是由READ COMMITED覆蓋爲默認,是嗎?)
[UPDATE 2]
我想
WHERE OrderDate > '1-1-2017'
是在的開始時的值交易。
什麼是你想守護反對?你想確保在你提交之前沒有其他數據庫會話可以爲'@ Id's插入Order_LineItems嗎?你想阻止別人插入匹配'WHERE OrderDate>'1-1-2017''的行直到你提交? –
添加到@BenGribaudo,問題是,當事務開始時或「SELECT」查詢運行時,是否希望'WHERE OrderDate>'1-1-2017''的值爲結果? –
嗨,大家好,謝謝你們倆的好問題!我已更新我的問題。 –