参阅《MySQL参考手册》第15.6.2小节: 每个 InnoDB 表都有一个称为聚簇索引的特殊索引, 其中存储了行的数据。通常,聚簇索引与主键 同义。 在 PRIMARY KEY 表上 定义a 时, InnoDB 将其用作聚簇索引。 为您创建的每个表定义主键。 如果没有逻辑唯一且非空列或列集,请添加一个新的 自动增量 列,其值将自动填充。 如果没有 PRIMARY KEY 为表 定义一个 ,MySQL将找到 UNIQUE 所有键列 所在的第一个 索引, NOT NULL 并将 InnoDB 其用作聚簇索引。 如果表没有 PRIMARY KEY 或 没有 合适的 UNIQUE 索引,则在 InnoDB 内部生成一个隐藏的聚簇索引 GEN_CLUST_INDEX ,该 索引 在包含行ID值的合成列上 命名 。 行按照 InnoDB 分配给此类表中的行 的ID排序 。 行ID是一个6字节的字段,随着新行的插入而单调增加。 因此,由行ID排序的行在物理上处于插入顺序。 所以,如果你的表没有主键,在创建表的时候,你可以设置某一字段为唯一索引UNIQUE,这样它将成为这个表的聚簇索引,如果既没有主键,也没有唯一索引,则mysql将创建一个隐藏的聚簇索引。
参阅《MySQL参考手册》第15.6.2小节:
所以,如果你的表没有主键,在创建表的时候,你可以设置某一字段为唯一索引UNIQUE,这样它将成为这个表的聚簇索引,如果既没有主键,也没有唯一索引,则mysql将创建一个隐藏的聚簇索引。