4

子查询SQL - 什么时候应该使用“with (nolock)” </a>

在当地的一家金融机构中,他们的程序员指责我表达了我的观点,即(他们的程序员痴迷于)(b)锁定他们的 MS SQL Server 2005 数据库中的问题对我来说没有多大意义。

如果财务操作从未更新、删除甚至不正确的操作(“交易”的一部分?)通过向数据库中插入(添加)新的更正记录来更正,那么可能出现的锁定、阻塞、死锁问题是什么?
这在英语中的术语是什么?在其他语言中,它被称为 storno、stornoed (?) 操作/记录。

因此,据我了解,“交易”实际上永远不会回滚,也永远不会有不正确/不存在的记录,只有未实现的记录。

更新:
我用谷歌搜索了 storno,找不到任何用英文定义或在英文文本中使用的结果。
我仅在意大利语中找到了 storno(拉丁字母)的定义。
但是会计是在意大利发明的,许多意大利会计术语在其他语言中使用,例如,在俄罗斯会计(银行)中。
我还以为这是国际公认的财务运营会计惯例,不是吗?

更新 2:
S.Lott 给了我链接到
在 ERP 应用程序中交易被撤销的方式很重要!说 storn 是逆转交易。

好吧,这是不正确的。Storno 不仅是交易,它是纠正错误操作的任何操作(交易的一部分),尽管 2 个操作组合起来可能看起来是逆向交易(由 2 个操作组成 - 对目标和源帐户进行贷记和借记)。

那么,storno 是不是全球通用的财务会计实践?

无论如何,我想避免讨论会计细节/技术/术语,并将问题限制在从不删除或更新记录的上下文中。

在这种情况下,锁定、阻塞、死锁、性能可能会出现哪些问题?

4

1 回答 1

2

“Storno Transactions”或“Reversing Transactions”总结得很好。在很多地方。

http://richardatopenbravo.blogspot.com/2010/02/way-that-transactions-are-reversed-in.html

http://help.sap.com/saphelp_46b/helpdata/en/d2/6f921f415e11d182b10000e829fbfe/content.htm

http://forum.wordreference.com/showthread.php?t=1875166

不要将软件实施与会计混为一谈。一个合理的实现可以通过最少的锁定来实现。然而,这并不意味着什么。您可能会因为软件 (a) 设计不良和 (b) 由于设计不良而需要小心锁定而受到指责。

可能的问题是什么...?

由于我们不知道软件编写得有多好或有多差,因此无法猜测。他们可能知道一些你不知道的关于他们的系统的事情。

一个简单的 Storno 交易系统应该很容易实现。确实,它应该是微不足道的。

如果在插入期间使用页级锁定,一对“仅插入”表仍可能遇到死锁。

表 A,第 1 页在事务 X 中有一个插入。

表 B,第 2 页在事务 Y 中有一个插入。

表 B,第 2 页在事务 X 中有一个插入。

表 A,第 1 页在事务 Y 中有一个插入。

避免死锁的唯一方法是让整个系统使用单个表。或者将所有事务限制在一个表中。或者使用单个数据库范围的锁。

如果您有多个表操作(和页级锁定),那么即使使用仅插入操作,您仍然会遇到潜在的死锁。显然这是罕见的,但仍有可能。

于 2010-10-01T02:54:31.490 回答