Mysql 单行汇总表应该有主键吗?
假设您有一个只包含一行的汇总表(存储关于另一个表的统计数据行)。在本例中,我使用的是InnoDB,这样我就可以更新它以及它要包含事务摘要的表。我应该让这个表有一个主键吗?如果是这样的话,什么,只是一个总是等于1的极小值?在这种情况下,我从不麻烦。PK用于区别于其他记录,在这种情况下没有记录。我想你应该这样做,你不知道将来是否可以使用同一个表来存储其他表的统计数据,这似乎是一个存储它们的好地方,然后您需要标识表中的每一行。如果您计划扩展此表,该怎么办?定义一个键可能会有一些意义。再说一次,这只是一种观点,对你来说不是必要的。我现在不会介绍PK。如果您决定将此表也用于其他记录,只需重构并添加新行(您可能需要)(过早优化)。添加这样一个PK还有一个原因:如果您使用的框架在没有标识记录的PK的情况下无法更新记录。Mysql 单行汇总表应该有主键吗?,mysql,schema,Mysql,Schema,假设您有一个只包含一行的汇总表(存储关于另一个表的统计数据行)。在本例中,我使用的是InnoDB,这样我就可以更新它以及它要包含事务摘要的表。我应该让这个表有一个主键吗?如果是这样的话,什么,只是一个总是等于1的极小值?在这种情况下,我从不麻烦。PK用于区别于其他记录,在这种情况下没有记录。我想你应该这样做,你不知道将来是否可以使用同一个表来存储其他表的统计数据,这似乎是一个存储它们的好地方,然后您需要标识表中的每一行。如果您计划扩展此表,该怎么办?定义一个键可能会有一些意义。再说一次,这只是一
InnoDB
将为您创建一个隐藏的主键,如果您不提供主键
有时访问此密钥会更容易,因为
INSERT
...
ON DUPLICATE KEY UPDATE
可用于更新此表,无论它是否已具有值
是的,只要使用一个常量
1
我就会在它上面放一个标识列(我不知道InnoDB的等价物是什么)。这样做是无害的,如果需要的话,可以更容易地选择或删除特定行。我将提供一个魔鬼代言人的答案,因为大多数其他答案都是“不,你不需要。”
主键约束可确保在应用约束的列中不会得到具有重复值的行。您说过希望这个表只有一行,那么为什么不声明约束呢?它可以帮助防止重复,这正是您想要的。您可以随时使用ALTER TABLE添加新字段。在InnoDB中,它是一个自动增量列。总体思路是:不,您不需要一个,但要小心不要得到两个相同的记录。哈,这不是优化。虽然我很惊讶没有下意识的回答:“每个桌子都需要一个主键!”。