我可以创建一个没有 PK 的 InnoDB 表吗?如果是这样,是否会使用二级索引作为聚集索引?

Con*_*ion 5 mysql innodb primary-key clustered-index

是否可以在没有主键的情况下创建 InnoDB 表?

由于 InnoDB 表被构造为围绕 PK 的聚集索引,那么没有 PK 的表的结构会是什么?该表是否仍然是聚集索引,但围绕辅助键?

谢谢。

Mor*_*ker 7

如果您有一个不为空的唯一键,它会在内部被提升为集群键(或者如果您有多个符合此条件的键 - 第一个是。)

如果您没有非空的唯一键,则会创建一个长度为 6 个字节的隐藏键。

没有办法指定要聚集的键,也没有办法没有聚集索引。


gbn*_*gbn 3

是的,在任何 RDBMS 上,如果您仍然有一个包含不可为空列的唯一索引来标识各个行。

“唯一键”和“主键”之间的区别是 PK 不允许 NULL。NULL 不与 NULL 进行比较,因此您无法唯一标识具有可为空的唯一键的行。特别是如果您的 RDBMS 为了唯一性而忽略 NULL(例如,SQL Server 在唯一索引中最多允许一个 NULL)

任何索引(PK 是索引)都可以聚集:但每个表都应该有聚集索引(在使用后清除的临时表之外)。聚集索引可以是 PK、唯一键或其他索引。

我确信MySQL允许分离索引唯一性和集群