mysql中autoincrement能产生的最大ID号是多少

Posted

技术标签:

【中文标题】mysql中autoincrement能产生的最大ID号是多少【英文标题】:What is the biggest ID number that autoincrement can produce in mysql 【发布时间】:2012-05-29 05:47:55 【问题描述】:

我有一个数据库,它快速填充了我们每天谈论 10-20k 行的数据。

带有自动增量选项的 ID 有什么限制?如果 ID 被创建为 INTEGER 那么我可以为无符号值做 2,147,483,647 的最大值吗?

但是当自动增量超过这个值时怎么办?一切都崩溃了吗?那有什么办法呢?

我相信很多人都有大型数据库,我想听听他们的意见。

谢谢。

【问题讨论】:

2,147,483,647 @ 每天 20,000 = 294 年。我不会太担心。 嗯,我从来没有那样看它..我想确保我的数据安全,但如果我像你一样看它,那就很有趣 UNSIGNED INT 的最大值为 4,294,967,295。 【参考方案1】:

如果您担心它增长过快,我会将 PK 设置为 UNSIGNED BIGINT。这给你一个最大值 18446744073709551615,这应该足够了。

【讨论】:

这将他的应用程序的生命周期延长到大约 2 万亿年。我想知道这是否足以让denonth感到安全...... @MarkByers 呵呵是的,我不确定 :) 接受的答案并未回答上述所有问题。 evilReiko 的答案确实如此。这个答案还对您的应用程序及其用例做出了一些非常强烈的假设,这可能是不安全的。【参考方案2】:
                    | Min. (inclusive)           | Max. (inclusive)
-----------------------------------------------------------------------------
INT Signed (+|-)    |             -2,147,483,648 |              2,147,483,647
-----------------------------------------------------------------------------
INT Unsigned (+)    |                          0 |              4,294,967,295
-----------------------------------------------------------------------------
BIGINT Signed (+|-) | -9,223,372,036,854,775,807 |  9,223,372,036,854,775,806
-----------------------------------------------------------------------------
BIGINT Unsigned (+) |                          0 | 18,446,744,073,709,551,615

mysql reference.

如果您的 MySQL 表的列 ID (INT unsigned) 具有 auto_increment,并且该表有 4,294,967,295 条记录,那么您尝试再插入 1 条记录,新记录的 ID 将自动更改并设置为最大值是“4,294,967,295”,因此您会收到一条 MySQL 错误消息 Duplicate entry '4294967295' for key 'PRIMARY',如果该列设置为主键,您将有重复的 ID。

2 个可能的解决方案:

    Easy Approach:通过将 ID 设置为 BIGINT unsigned 来扩展限制,就像 Dan Armstrong 所说的那样。虽然这并不意味着它是牢不可破的!当表变得非常大时,性能可能会受到影响。 更困难的方法:Use partitioning,,这是一种更复杂的方法,但性能更好,并且真正没有数据库限制(您唯一的限制是物理硬盘的大小。)。 Twitter(和类似的大型网站)每天使用这种方法处理数百万条推文(记录)!

【讨论】:

以上是关于mysql中autoincrement能产生的最大ID号是多少的主要内容,如果未能解决你的问题,请参考以下文章

MySQL AutoIncrement--PXC集群批量插入操作获取自增ID异常问题

如何在不检查 MySQL 中的 AUTOINCREMENT 的情况下增加主键

MySQL AutoIncrement--自增锁模式

MySQL 不接受这个过程。你能帮忙吗?

MySQL到底能支持多大的数据量?

AutoIncrement无法设置的问题