我的数据库中有2个表。它们是物品和场。 Item是实现树的自引用表。这意味着在Item表中,我有ID和ParentId列。通过这种方式,我们可以在Item表中存储树。 Field是一个用于存储项目的其他扩展属性的表。字段表有一个名为“Item_ID”的列,用于引用项目表。
好的,现在我们只想将事务添加到数据库操作中。我们发现了一些奇怪的行为作为标题。
正如微软所说,我们运行以下sql来启用数据库的快照隔离:
ALTER DATABASE AdventureWorks2008R2
SET READ_COMMITTED_SNAPSHOT ON;
ALTER DATABASE AdventureWorks2008R2
SET ALLOW_SNAPSHOT_ISOLATION ON;
然后我们进行以下测试:
打开2个测试程序
第一个程序更新第1项并在事务提交之前被阻止。
使用第二个程序尝试删除第2项。第1项与第2项无关。这意味着第1项不是第2项的父/子。
然后我们发现第二个程序被第一个程序阻止了。如果我们继续第一个程序,那么如果没有超时,我们第二个程序将完成。
我对这个结果感到很奇怪。因为我认为即使第1项在交易中我也可以删除第2项。谁知道为什么会这样?
答案 0 :(得分:0)
听起来你根本没有得到SNAPSHOT ISOLATION(因为冲突更新/删除会导致失败,而不是最终完成)。
你没有字面意思执行ALTER DATABASE AdventureWorks2008R2...
- 是吗?
由于“AdventureWorks2008R2”需要替换为数据库名称...