繁体   English   中英

MySQL PRIMARY KEY与UNIQUE约束

[英]MySQL PRIMARY KEY vs UNIQUE constraints

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

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

作为前言,请注意主键不需要是单个列:它可以由多个列组成:这称为复合键。 另请注意,并非每个表都具有AUTO_INCREMENT / IDENTITY列,并且无论如何您都可以在复合键内的单个列上具有UNIQUE约束。

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

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

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

(此外, AUTO_INCREMENTUNIQUEPRIMARY KEY不相互包含:您可以将AUTO_INCREMENT与非唯一列一起使用(例如,如果在表已包含数据后添加AUTO_INCREMENT ),则相反, PRIMARY KEY可以使用来自其他地方的唯一值如另一个身份列作为外键(复合主键可以包含外键!)或“自然”的数据源,如使用美国社会安全号码作为主键(当然你应该这样做在现实中))。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM