【问题标题】:MySQL. UNIQUE and PRIMARY KEY constraints for the same fieldmysql。同一字段的 UNIQUE 和 PRIMARY KEY 约束
【发布时间】:2016-11-23 13:56:41
【问题描述】:

我发现了一些遗留代码,它们为主键字段设置了两个几乎相同的约束(UNIQUEPRIMARY KEY)。

这是代码示例:

CREATE TABLE foofoo (
  id NUMERIC(9) NOT NULL ,
  bar VARCHAR(40) NOT NULL,

  CONSTRAINT PK_foofoo PRIMARY KEY (id),
  CONSTRAINT UNIQUE_foofoo UNIQUE(id)
)

我认为设置这两个设置是多余的,PRIMARY KEY 可以完成这项工作。

当然,我读过这两个约束有什么区别,但是

为同一个字段设置这两个约束有什么意义

【问题讨论】:

  • e4c5 我不是在问差异,我是在问为什么任何人都应该为同一个字段设置这两个约束。也许这背后是有原因的。
  • @e4c5,您如何认为它与链接的答案重复?你能解释一下吗?
  • 这样做有一个很好的好处 - 知道是谁做的这告诉你,这是一个你不想作为你同事的人。这样做太愚蠢了,没有任何意义。这就像在一杯水中添加更多的水使水更湿润,或者在白色中添加白色使其更白。这样做的人不知道他在 IT 生活的那个阶段在做什么。经典人类。
  • 哈哈你让我开心@Mjh!

标签: mysql constraints primary-key unique-constraint


【解决方案1】:

这样做没有意义。主键本质上总是唯一的。我建议不要同时创建两个索引,因为索引是有代价的(主要是磁盘空间)。只要创建PK,你就会很好!

【讨论】:

  • 另外,既然你在问这个问题,我强烈建议你尽可能多地阅读索引。它们是一个奇妙的东西,非常方便,但它们是一把双刃剑。如果使用不小心,它们会变得非常巨大,但如果使用得当,它们会创造奇迹。在这里的一个简单评论几乎不会触及表面,所以是的,我建议阅读这个主题。通过添加一个简单的索引,我将查询速度从几分钟缩短到几秒钟。但同样,请注意您所做的事情,他们最终可能会花费您超过他们给您的费用。
  • 我见过有数千兆位无用索引的数据库...另外,不要忘记这些也与您的数据库一起备份。因此,如果您设置频繁的备份,例如每晚或类似的情况,您的索引不仅会使您的生产数据库更大,而且还会使您的备份和开发数据库(如果有的话)更大。所以,再次阅读它们,它们很棒,但不要滥用它们!
【解决方案2】:

设置与 PK 完全相同的约束是没有意义的。

主键已确保此列是唯一的且已编入索引。

【讨论】:

  • 在 SQL Server 中,主键不一定是集群的。
【解决方案3】:

我认为这是多余的......

是的,确实是多余的;因为无论如何对列进行主键约束将确保该列只有唯一值。在同一列上定义额外的UNIQUE 约束是没有意义的。

【讨论】:

    【解决方案4】:

    当您声明主要时: *PRIMARY KEY 约束唯一标识数据库表中的每条记录 *主键必须包含唯一值 所以他们不需要声明主键是唯一的,因为每当你声明任何主键时,UNIQUE 值就已经附加到它们上了。 对于唯一键: * UNIQUE 约束唯一标识数据库表中的每条记录。 * UNIQUE 和 PRIMARY KEY 约束都为一列或一组列提供唯一性保证。 *PRIMARY KEY 约束自动定义了一个 UNIQUE 约束。 最重要的一点是 *请注意,每个表可以有许多 UNIQUE 约束,但每个表只能有一个 PRIMARY KEY 约束。 在 mysql 中,当我与主键相同且唯一时,它给了我错误

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-20
      • 2015-10-05
      • 1970-01-01
      • 1970-01-01
      • 2012-06-10
      • 2020-09-17
      • 1970-01-01
      相关资源
      最近更新 更多