唯一约束与预检查

时间:2011-01-17 14:03:28

标签: sql sql-server database-design

我使用SQL Server 2008,并且我有一个表格,其中包含varchar(X)类型的列,我希望它具有唯一值。

实现这一目标的最佳方法是什么?我应该使用唯一约束并捕获异常,还是应该在插入新值之前进行预检?

有一个问题,许多用户都使用该应用程序,因此我猜如果两个用户插入相同的值,预检可能会导致竞争状态。

由于

4 个答案:

答案 0 :(得分:7)

竞争条件是一个值得注意的好点。

为什么不两个都做? - 预先检查,以便您可以向用户提供良好的反馈,但绝对有唯一的约束作为您的最终保障。

答案 1 :(得分:4)

让DB为您完成工作。创建唯一约束。

答案 2 :(得分:3)

如果要求值是唯一的 - 则约束是实现该目标的唯一保证方式。可靠的所谓预检将需要一定程度的锁定,这将使您系统的这一部分基本上成为单个用户。

答案 3 :(得分:3)

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