我正在创建一个数据库表,我没有给它分配一个逻辑主键。每个表都应该有一个主键吗?


当前回答

几乎每次我创建一个没有主键的表时,我都认为我不需要主键,最终我会返回并添加一个主键。现在,我甚至用一个自动生成的标识字段作为主键来创建连接表。

其他回答

简而言之,没有。但是,您需要记住,某些客户机访问CRUD操作需要它。为了将来的校对,我总是倾向于使用主键。

只要添加就可以了,以后你会后悔没有(选择,删除)。连接等)

我想找到一些官方的东西像这样- 15.6.2.1集群和次要索引- MySQL。

如果表没有PRIMARY KEY或合适的UNIQUE索引,InnoDB内部会在一个包含行ID值的合成列上生成一个名为GEN_CLUST_INDEX的隐藏聚集索引。行是根据InnoDB分配给这样一个表中的行的ID来排序的。行ID是一个6字节的字段,随着新行插入而单调增加。因此,按行ID排序的行在物理上按插入顺序排列。

为什么不自己创建主键呢?此外,ORM不能识别这个隐藏的ID,这意味着您不能在代码中使用ID。

我总是有一个主键,即使一开始我还没有想到它的目的。有几次,当我最终需要在一个没有PK的表中输入PK时,总是会遇到更多的麻烦。我认为总是有一个人会有更多的好处。

除了少数非常罕见的情况(可能是多对多关系表,或者临时用于批量加载大量数据的表),我会使用以下说法:

如果它没有主键,它就不是表!

Marc