当前位置: 首页 > 面试题库 >

每个MySQL表都应该有一个自动递增的主键吗?

南宫胡媚
2023-03-14
问题内容
  • 我了解主键的价值。
  • 我了解索引的价值。

每个 MySQL表都应该有一个自动递增的主键(最好是INT字段类型)吗?

更新

@Raj More的答案似乎是最有效的。但是,我想到的问题是,此自动递增的主键ID将如何与其他表相关。例如:

表格1

ID  |   firstname  |   lastname | email
----------------------------------------
1   |    john      |   doe      | 1@email.com
2   |    sarah     |   stow     | 2@email.com
3   |    mike      |   bro      | 3@email.com

表2

ID  | memberid |    display      |    address
--------------------------------------------
1   |    1     | funtime zone    |   123 street
2   |    3     | silly place llc |  944 villa dr

在上面的示例中,消费者可以来到该站点并选择注册免费的产品/服务。如果消费者选择,他们可以提供其他信息(存储在表2中)以进行其他邮件发送等。我看到的问题是这些表与“主键自动递增字段”之间的关系。在表2中,“成员ID”与表1的ID相关,但“不清楚”。放入表2的任何新信息都将增加1,而并非
所有 消费者都会选择参加表2所需的数据。


问题答案:

上面的内容可能被视为讽刺或火红的(尽管有很多令人惊讶的投票),因此将其删除。

在一般情况下,关于代理键和自然键有很多问题和答案,所以我觉得这个问题更像是重复的问题。我的看法是代理键很好而且非常有用,主要是因为自然键可以在连接表链的低端导致很大的主键-
而且许多RDBMS不能很好地处理它,聚集索引变大等等。但是说“ _ 每个
MySQL表都应该有一个自动递增的主键_”是一个非常绝对的说法,我认为在某些情况下它们实际上提供的很少甚至没有。

自从OP更新了问题以来,我将尝试就该特定主题发表评论。

我认为这正是自动递增主键不仅无用,而且会增加负值的情况。假设table1table21:1关系中,memberid既可以是Primary Key和一Foreign Keytable1

添加一个自动递增的id列会添加一个索引,如果它是一个聚集的索引(如InnoDB
PK索引),则会增加索引的大小memberid。更有甚者,如果你有这样一个自动递增的ID,有些JOIN表2至其他表将不得不使用来完成这个id(这些连接到表中1:n关于表2)和一些使用memberid(这些连接到表中1:n关系table1)。如果您memberid同时拥有这两种类型的JOIN,则可以使用memberid



 类似资料:
  • 我有一个问题,“列表中的每个孩子都应该在我的应用程序中有一个唯一的“键”道具”错误。我可以打印表格,但我不知道为什么它给我这个错误,因为我提供了一个唯一的ID列表中的每个项目。 我也尝试过向我的表头添加一个键属性,但这并不能修复错误。 如有任何意见,将不胜感激 客户组件 表组件

  • 在这个简单的React应用程序中,我不明白为什么我会收到以下警告信息: 警告:列表中的每个孩子都应该有一个唯一的“键”道具。 对我来说,似乎我把密钥放在了正确的位置,形式为key={item.login.uuid} 我怎样才能摆脱警告信息?把钥匙放在哪里合适? 应用程序。js 列表js

  • 问题内容: 这可能在MySql中吗?我可以有一个以字母为前缀的自动递增主键,例如R1234,R1235,R1236 …等等吗? 问题答案: 您可以做的是将密钥存储为两列。一个char前缀和一个auto-incrementing int,它们都被分组为主键。

  • 问题内容: 我正在使用Google Books API构建应用,并且似乎正在向列表中的每个孩子传递唯一键,但是错误不会消失。我一定在做错事,但不确定。 请注意,在返回const books之后,我有一个console.log(book.id),它将在控制台中显示所有10个唯一的id键。但是,当我尝试使用key = {book.id}将其传递给该组件的子组件时,会出现此错误。 问题答案: 在需要去最

  • 我是新手,我正在编写一个包含卡片的应用程序平面列表,但我发现这个错误,这是我的代码 但是我得到警告:列表中的每个孩子都应该有一个独特的“钥匙”道具。有关更多信息,请参见https://fb. me/react-warge-key。%s, 我做错了什么?

  • 我对如何创建一个简单的todo应用程序的反应和探索方式还不熟悉。我当前收到错误“警告:列表中的每个孩子都应该有一个唯一的“键”道具。”一切似乎都很好,但我一定是做错了什么。 如果有人能帮上忙,那就br太好了/解释为什么会发生这个错误,那就太好了。