我在我的數據庫中有2個表。他們是項目和領域。 Item是實現樹的自引用表。這意味着在項目表中,我有ID和ParentId列。這樣,我們可以在Item表中存儲一棵樹。 字段是存儲項目的其他擴展屬性的表格。字段表有一個名爲「Item_ID」的列來引用項目表。爲什麼更新快照隔離sql server數據庫中的事務塊刪除操作?
好吧,現在我們只是想添加事務到數據庫操作。我們發現一些奇怪的行爲作爲標題。
隨着微軟問,我們運行下面的SQL,使我們的數據庫的快照隔離:
ALTER DATABASE AdventureWorks2008R2
SET READ_COMMITTED_SNAPSHOT ON;
ALTER DATABASE AdventureWorks2008R2
SET ALLOW_SNAPSHOT_ISOLATION ON;
然後我們做如下測試:
打開2測試程序
第一個程序更新項目1並在事務提交之前被阻止。
使用第二個程序試圖刪除第2項第1項與第2項無關船舶也就是說,第1項不就是項目的2
然後,我們發現第二父/子程序被第一個程序阻止。如果我們繼續第一個程序,那麼如果它沒有超時,我們第二個程序將結束。
我對這個結果感到很奇怪。因爲我認爲我可以刪除第2項,即使第1項在交易中。誰知道這是爲什麼發生?
如果真的有兩個記錄之間沒有直接的關係,這聽起來像數據庫服務器執行表鎖而不是行鎖定。 – gorjusborg 2012-03-14 13:39:50
@YuRDeD,我想你是對的。由於父母/孩子的關係(我承認,我不知道SQL Server鎖定策略的內部),我懷疑它必須執行表級鎖定。 – 2012-03-14 13:44:55
@Pleepleus是的,我也這麼認爲。但我覺得沒有必要這樣做。我想知道是否有任何解決方案。 – Coofucoo 2012-03-15 02:48:17