我在表中有一个具有唯一约束的列。
现在一般情况下,最好在数据库中检查该列的值是否重复或者是否更好地处理它在try catch中产生的异常?
答案是否是一般性的,或者会出现这样的情况:例如,如果它只是一个简单的表,例如用户名列,或者表有多列和外键。
编辑:
在阅读了这两个答案之后我认为这个问题是有争议的,因为它可能会导致数据库在预检或搜索异常时的代码问题时出现性能问题,但我认为我更喜欢捕获异常,特别是如果唯一值需要更新
答案 0 :(得分:4)
要在尝试插入之前检查数据库,您要么最终引入竞争条件,要么取出键范围锁(可能导致阻塞等)。在任何一种情况下,当你实际插入时,它将不得不检查重复的 ,所以你纯粹添加工作(可能还有额外的往返)。
确实依赖于位重置的可能性,但在大多数情况下:这是例外情况,并且可能应该这样处理 - 通过数据库中的异常报告问题。但是:总会有一些情况下提前检查是明智的 - 在这种情况下,你可能会同时做两件事。例如,在数据输入应用程序中,只要用户在此处输入键输入值并选择下一个控件的选项卡 - 您可以在后台检查数据库 以验证那里还不是一个价值:但是 - 您仍然需要为数据不断变化的事实做好准备 - 所以 无论您如何检查 ,它仍然可以在您插入时重复。
答案 1 :(得分:1)
我通常在异常命中之前添加验证/检查,这样可以帮助我规划验证失败时应该执行的操作。虽然约束可能会做同样的事情,但我相信抛出异常是昂贵的,因为它会创建额外的对象。但总的来说,最好有多个检查 - 验证,约束等。这样你就可以确保数据的完整性。