20 一个表最多可以有一个PRIMARY KEY约束,但是可以有多个UNIQUE KEY约束。 属于的列PRIMARY KEY必须定义为NOT NULL。对于作为UNIQUE KEY约束一部分的列,则不需要这样做。如果列不可为空,则唯一键和主键之间没有区别。 另一个小的区别是,您可以选择所需的UNIQUE KEY约束(和索引)名称。另一方面,PRIMARY KEY具有默认名称:PRIMARY。 — 超级立方体 source
4 其他人没有指出的事情: 如果您没有在InnoDB表中显式声明PK,它将在幕后为您创建一个。您不能使用此隐式键访问,排序或过滤。由于每个二级索引都包含指向该行PK的复制指针,因此在资源方面存在分歧。 — 阿特克斯巴 source
3 最重要的区别在于它们的目的。 主键:主键的目的是充当“键”。主键是关系数据库中用于标识记录的键。 唯一索引:唯一索引是旨在提高效果的“索引”。优化器知道,对于条件“其中x =:x”,结果将只有一个记录-因此它可以准备适合该计划的计划。 唯一约束:这是“ CONSTRAINT”,可确保该列中没有重复的值。这是数据完整性的约束。 除其目的外,以下几点值得注意。 除非另有指定,否则PRIMARY KEY会尝试创建一个聚集索引(尽管这是有关SQL Server的,如注释中所述) 每个表只能有一个PRIMARY KEY;但是可以有很多独特的约束和独特的索引 PRIMARY KEY始终不为null,但是具有唯一约束的列可以保存NULL值 — LCJ source 1 问题被标记为MySQL。您不能另外指定,如果该表使用InnoDB引擎并且具有主键,则这是聚簇索引。没有选择。也许您在考虑SQL Server。 — ypercubeᵀᴹ