首页 文章

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

提问于
浏览
1

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

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

答案是否一般,或者会出现这样的情况:例如,如果它只是一个简单的表,例如用户名列,或者表有多列和外键 .

编辑:

在阅读了这两个答案之后,我认为这个问题是有争议的,因为它可能会导致预检时数据库的性能问题或捕获异常时的代码问题,但我认为我更喜欢捕获异常,特别是如果唯一值需要更新 .

2 回答

  • 4

    要在尝试插入之前检查数据库,您要么最终引入竞争条件,要么取出键范围锁(可能导致阻塞等) . 在任何一种情况下,当你实际插入时,无论如何都要检查副本,所以你纯粹是在增加工作(可能还有额外的往返) .

    它确实取决于复制的可能性,但在大多数情况下:这是例外情况,并且可能应该如此处理 - 通过数据库报告问题时的异常 . 但是:总会有一些情况下提前检查是明智的 - 在这种情况下,你可能会同时做两件事 . 例如,在数据输入应用程序中,只要用户在此输入键输入值,并选择下一个控件 - 您可以在后台检查数据库以验证是否还没有值:但是 - 您仍然需要为数据不断变化的事实做好准备 - 来自多个来源 - 所以 no matter how you check ,在您插入时它仍然可能是重复的 .

  • 1

    我通常在异常命中之前添加验证/检查,这样可以帮助我规划验证失败时应该执行的操作 . 虽然约束可能会做同样的事情,但我相信抛出异常是昂贵的,因为它会创建额外的对象 . 但总的来说,更有可能进行多次检查 - 验证,约束等 . 通过这种方式,您将确保数据的完整性 .

相关问题