唯一列约束,异常与数据库检查?

ykh*_*ykh 2 c# exception try-catch unique-constraint sql-server-2008

我在表中有一个具有唯一约束的列。

现在一般来说,如果该列的值是否重复,最好检查数据库,或者最好处理它在 try catch 中产生的异常?

答案是通用的,还是会出现这样的情况,例如它只是一个简单的表,例如用户名列,或者表有许多列和外键。

编辑:

在阅读了两个答案后,我认为这件事是有争议的,因为它可能会导致数据库在预检查或捕获异常时出现代码问题的性能问题,但我认为我更喜欢捕获异常,尤其是在唯一值需要更新的情况下。

Mar*_*ell 5

要在尝试插入之前检查数据库,您最终会引入竞争条件,或者取出键范围锁(这可能会导致阻塞等)。在任何一种情况下,当您实际插入时,无论如何都必须检查重复项,因此您纯粹是在添加工作(可能还有额外的往返)。

它取决于一个上有多大的可能性是重复的,但在大多数情况下:这是特殊的,并且可能应该这样处理-通过一个异常时,数据库报告问题。但是:总会有一些情况下提前检查是明智的 - 在这些情况下,您可能会同时进行。例如,在数据输入应用程序中,一旦用户在此处的键输入中输入一个值,并切换到下一个控件 - 您可能会在后台检查数据库以验证是否还没有值:但是- 您仍然需要为来自多个来源的数据不断变化的事实做好准备 - 所以无论您如何检查,在您插入时它仍然可能是重复的。