MySQL PRIMARY KEY与UNIQUE约束

时间:2017-11-26 05:56:09

标签: mysql

根据MySQL文档,PRIMARY KEY约束和UNIQUE约束之间的区别在于PK约束不允许NULL值,而UQ约束DOES允许NULL值。在MySQL表中,可以为同一列创建PK和UQ!

  • 为已经拥有PK约束的列创建UNIQUE约束的意义或原因是什么??
  • 为什么MySQL允许为已经有PK约束的列创建唯一约束?

1 个答案:

答案 0 :(得分:3)

作为前言,请注意主键不需要是单个列:它可以由多个列组成:这称为复合键。另请注意,并非每个表都包含AUTO_INCREMENT / IDENTITY列,并且您可以对复合键内的单个列设置UNIQUE约束。

  1. 没有 - 但是DBMS要禁止这样的冗余是没有意义的,因为你需要增加逻辑和复杂性来处理这种情况,而没有真正的同时造成的伤害(除了必须维护两个索引的性能影响)。

  2. 如上所述:因为检测和防止冗余的机会成本是不值得的。

  3. 要考虑的另一件事是表的主键定义不是不可变的,因此可能会发生变化。一个表可能已经有一个UNIQUE约束设置的列,然后数据库设计者决定将其包含在一个新的主键定义中 - 要求旧的约束是一个用户不友好的首先删除,特别是如果他们的应用程序系统的其他部分依赖于那里的UNIQUE约束(例如1:0..1关系定义)。

    (另外,AUTO_INCREMENTUNIQUEPRIMARY KEY不相互包容:您可以将AUTO_INCREMENT与非唯一列一起使用(例如AUTO_INCREMENT在表已经包含数据之后添加,并且相反,PRIMARY KEY可以使用来自其他地方的唯一值,例如另一个标识列作为外键(复合主键可以包含外键!)或“自然”数据源,例如使用美国社会安全号码作为主键(当然,您从不实际执行此操作))。