哪个是SQL Server数据库中表的更好的独特或唯一约束?

时间:2014-11-12 06:48:02

标签: database sql-server-2008

对于SQL Server数据库中的表,哪个更好的独特或唯一约束?

我应该使用

  

不同

从大表中获取记录或放入

  

唯一约束

到该字段,所以没有重复输入?

我的最终目标只是那样,获取唯一数据,我知道两者都会给我这个,但如果我使用唯一约束字段,那么它会在我插入重复数据时给出sql错误。好吗?它对服务器或数据库有影响吗?我正在使用SQL Server进行此过程。

3 个答案:

答案 0 :(得分:1)

他们完全完全不同的用例。


如果列本身(或列集)必须根据架构详细信息(数据)唯一,则使用唯一约束。换句话说,如果要求数据在该列(或列集)上是唯一的,请使用唯一约束。

例如,如果您要维护成员资格表,则成员ID应该是唯一的。

数据库必须保护自己免受狡猾的数据攻击,这不应该留给行为良好的应用程序,因为第一个不良行为的应用程序会破坏你的宇宙。


如果数据必须是唯一的(例如每个成员所在的城镇),那么你可以决定" uniquify"它在select语句中,取决于您的需求:

-- Get all towns.
select distinct town from members

所以,这是你的解决方案矩阵,优先级递减:

  1. 实际的数据在该列上是否必须是唯一的?如果是这样,则必须使用唯一约束。否则,不应使用唯一约束。

  2. 如果数据不需要是唯一的,那么您是否只需要为该数据的每个可能值获取一行?如果是,请使用select distinct。如果没有,请单独使用select

答案 1 :(得分:0)

  • UNIQUE:始终参与数据INSERTION(简要说明)
  • DISTINCT:始终关注数据检索(简要说明)

也许这会对你有帮助。

答案 2 :(得分:-1)

取决于

使用distinct您需要在查询时付款,但对用户来说更简单。

使用唯一约束,您需要在插入时付款,现在应用程序必须处理重复项上的异常,但查询速度更快。

如果没有更多信息,我会选择与众不同,因为生活更简单,你不会锁定行为(下周你可能需要重复)。