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异常问题