根据MySQL文档,PRIMARY KEY约束和UNIQUE约束之间的区别在于PK约束不允许NULL值,而UQ约束DOES允许NULL值。在MySQL表中,可以为同一列创建PK和UQ!
答案 0 :(得分:3)
作为前言,请注意主键不需要是单个列:它可以由多个列组成:这称为复合键。另请注意,并非每个表都包含AUTO_INCREMENT
/ IDENTITY
列,并且您可以对复合键内的单个列设置UNIQUE
约束。
没有 - 但是DBMS要禁止这样的冗余是没有意义的,因为你需要增加逻辑和复杂性来处理这种情况,而没有真正的同时造成的伤害(除了必须维护两个索引的性能影响)。
如上所述:因为检测和防止冗余的机会成本是不值得的。
要考虑的另一件事是表的主键定义不是不可变的,因此可能会发生变化。一个表可能已经有一个UNIQUE
约束设置的列,然后数据库设计者决定将其包含在一个新的主键定义中 - 要求旧的约束是一个用户不友好的首先删除,特别是如果他们的应用程序系统的其他部分依赖于那里的UNIQUE约束(例如1:0..1
关系定义)。
(另外,AUTO_INCREMENT
与UNIQUE
或PRIMARY KEY
不相互包容:您可以将AUTO_INCREMENT
与非唯一列一起使用(例如AUTO_INCREMENT
在表已经包含数据之后添加,并且相反,PRIMARY KEY
可以使用来自其他地方的唯一值,例如另一个标识列作为外键(复合主键可以包含外键!)或“自然”数据源,例如使用美国社会安全号码作为主键(当然,您从不实际执行此操作))。