mysql - mysql中主键的选择和自动增量的意外行为

标签 mysql database primary-key auto-increment

您好,我正在制作一个事件管理网站。来自世界各地的用户(每个用户都有一个唯一的登录 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/

相关文章:

python - 如何处理我的应用程序中的 AWS-RDS 连接?

ruby-on-rails - rails : Make request to development environment while using tests

database - Oracle 数据泵导出/导入

Java 数据库和结果集

sql - 我如何允许sql中的重复值?

zend-framework - 在doctrine2中是否可以有一个不是主键的自动增量列?

mysql - 将 MySQL 数据库连接到 Glassfish

Mysql替换功能问题

mysql - 在mysql数据库中存储字符长度~300,000的文本

c# - 违反 PRIMARY KEY 约束。无法在对象中插入重复的键