[英]MySQL. UNIQUE and PRIMARY KEY constraints for the same field
[英]MySQL PRIMARY KEY vs UNIQUE constraints
根据MySQL文档,PRIMARY KEY约束和UNIQUE约束之间的区别在于PK约束不允许NULL值,而UQ约束DOES允许NULL值。 在MySQL表中,可以为同一列创建PK和UQ!
作为前言,请注意主键不需要是单个列:它可以由多个列组成:这称为复合键。 另请注意,并非每个表都具有AUTO_INCREMENT
/ IDENTITY
列,并且无论如何您都可以在复合键内的单个列上具有UNIQUE
约束。
没有 - 但是DBMS 禁止这种冗余是没有意义的,因为你需要增加逻辑和复杂性来处理这种情况,而两者都没有真正的危害(除了必须的性能影响)维护两个索引)。
如上所述:因为检测和防止冗余的机会成本是不值得的。
另一件需要考虑的事情是表的主键定义不是不可变的,因此可能会发生变化。 表可能已经有具有UNIQUE
约束设置的列,然后数据库设计者决定将其包含在主键的新定义中 - 要求首先删除旧约束对用户不友好,尤其是如果他们的应用系统的其他部分依赖于那里的UNIQUE约束(例如1:0..1
关系定义)。
(此外, AUTO_INCREMENT
与UNIQUE
或PRIMARY KEY
不相互包含:您可以将AUTO_INCREMENT
与非唯一列一起使用(例如,如果在表已包含数据后添加AUTO_INCREMENT
),则相反, PRIMARY KEY
可以使用来自其他地方的唯一值如另一个身份列作为外键(复合主键可以包含外键!)或“自然”的数据源,如使用美国社会安全号码作为主键(当然你不应该这样做在现实中))。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.