我使用SQL Server 2008,并且我有一个表格,其中包含varchar(X)类型的列,我希望它具有唯一值。
实现这一目标的最佳方法是什么?我应该使用唯一约束并捕获异常,还是应该在插入新值之前进行预检?
有一个问题,许多用户都使用该应用程序,因此我猜如果两个用户插入相同的值,预检可能会导致竞争状态。
由于
答案 0 :(得分:7)
竞争条件是一个值得注意的好点。
为什么不两个都做? - 预先检查,以便您可以向用户提供良好的反馈,但绝对有唯一的约束作为您的最终保障。
答案 1 :(得分:4)
让DB为您完成工作。创建唯一约束。
答案 2 :(得分:3)
如果要求值是唯一的 - 则约束是实现该目标的唯一保证方式。可靠的所谓预检将需要一定程度的锁定,这将使您系统的这一部分基本上成为单个用户。
答案 3 :(得分:3)
使用约束(UNIQUE或PRIMARY KEY)。这样就可以为每个应用程序强制执行密钥。如果需要,您可以在存储过程中执行其他检查和处理 - 在插入之前或之后。