您好,我正在制作一个事件管理网站。来自世界各地的用户(每个用户都有一个唯一的登录 ID)可以添加事件。事件存储在临时表中,并在管理员批准后转移到事件表中。
我需要为 event_id 选择一个非常有效的键。代理键将是最好的选择。目前我正在使用自动增量。
1) 自动增量是否考虑表中最后一个最大的主键或最后添加的键。
问题)临时表中存在事件 ID 41、42、43。管理员批准 event_id 43 并离开临时表。现在临时表中最大的键是 42。
添加的下一个事件将再次在临时表中分配 id 43。为什么会发生这种情况?
我想使用其他东西作为主键。我应该怎么办 ??时间戳+用户ID是一个不错的选择。但这会导致主键很长
最佳答案
自动增量值来自计数器,因此通常您不会获得两次值。此外,每张 table 都有自己的计数器。
不过,InnoDB 存储引擎有一个问题:计数器在服务器启动时重置为列的最大值,因此如果 MySQL 在删除和插入之间重新启动,您可能会再次得到 43。如果您使用 MyISAM 存储引擎,则不会发生这种情况,因为计数器存储在磁盘上。
为了可扩展性,有些人建议使用 UUID,因为它们使您能够在多个服务器之间划分数据库,而不必担心在某个地方意外重用主键。然而,UUID key 需要更多的 CPU 和存储空间。
关于mysql - mysql中主键的选择和自动增量的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12507495/