唯一约束 vs 预检查

3

我使用 SQL Server 2008,有一个类型为 varchar(X) 的列,我希望它的值是唯一的。

最好的方法是什么?应该使用唯一约束并捕获异常,还是在插入新值之前进行预检查?

但问题在于,该应用程序由许多用户使用,因此我认为预检查可能会导致竞争条件,如果两个用户插入相同的值。

谢谢


相关问题 - https://dev59.com/7mEh5IYBdhLWcg3w6G8G - Steam
4个回答

10

竞态条件是需要注意的一个重点。

为什么不两者兼顾呢?预先检查可以向用户提供良好的反馈,但绝对要将唯一约束作为最终保障。


1
当涉及到数据验证时,冗余并不一定是坏事。前端检查可以提供更好的用户界面,后端检查可以保证数据完整性。 - araqnid
我不了解竞态条件。您能告诉我为什么在后端检查所有内容时还需要这样做吗?谢谢。 - Steam
@araqnid - 我无法看出冗余在这里有什么帮助。 - Steam

4

让数据库为您工作。创建唯一约束。


有没有任何情况下其中一种方法比另一种更好?我在这里发布了一个相关的问题-https://dev59.com/7mEh5IYBdhLWcg3w6G8G 请帮帮我。谢谢。 - Steam

3
如果需要确保值的唯一性,那么约束是实现这一目标的唯一可靠方式。可靠的所谓预检查需要一定级别的锁定,这将使您系统的某些部分基本上只能支持单个用户。

3

使用约束(UNIQUE或PRIMARY KEY)。这样,键可以在每个应用程序中得到执行。如果需要,您可以在存储过程中执行其他检查和处理 - 在插入之前或之后。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接