0

嗨,我正在制作一个活动管理网站。来自世界各地的用户(每个用户都有一个唯一的登录 ID)可以添加事件。事件存储在临时表中,并在管理员批准后转移到事件表中。

我需要为 event_id 选择一个非常有效的键。代理键将是最佳选择。目前我正在使用自动增量。

1)自动增量是否考虑表中存在的最后一个最大主键或添加的最后一个键。

问题)临时表中存在事件 id 41、42、43。管理员批准 event_id 43 并离开临时表。临时表中最大的键现在是 42。

添加的下一个事件在临时表中再次分配 id 43。为什么会这样?

我想用别的东西作为主键。我应该怎么办 ??时间戳+用户ID是一个不错的选择。这将导致一个非常长的主键

4

1 回答 1

1

自动增量值来自计数​​器,因此通常您不会获得两次值。此外,每张桌子都有自己的柜台。

不过,InnoDB 存储引擎有一个问题:计数器在服务器启动时重置为列的最大值,因此如果在删除和插入之间重新启动 MySQL,您可能会再次获得 43。如果您使用 MyISAM 存储引擎,则不会发生这种情况,因为计数器存储在磁盘上。

为了可扩展性,有些人建议使用 UUID,因为它们使您能够在多个服务器之间划分数据库,而不必担心在某处意外重用主键。然而,UUID 密钥需要更多的 CPU 和存储空间。

于 2012-09-20T07:23:52.413 回答