自动增量在mysql中可以生成的最大ID号是多少

use*_*456 56 mysql database integer auto-increment

我有一个数据库,快速填充我们每天10-20k行的数据.

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

但是当自动增量高于此值时呢?这一切都崩溃了吗?那会有什么解决方案呢?

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

谢谢.

Dan*_*ong 62

如果你担心它过快地超出界限,我会将PK设置为UNSIGNED BIGINT.这样您的最大值为18446744073709551615,这应该足够了.

  • 这将他的应用程序的生命周期延长到大约2万亿年.我想知道这是否足以让denonth感到安全...... (18认同)
  • 接受的答案并未回答上述所有问题。evilReiko 的答案确实如此。这个答案还对您的应用程序及其用例做出了一些非常强烈的假设,这可能是不安全的。 (2认同)

evi*_*iko 31

                    | 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
Run Code Online (Sandbox Code Playgroud)

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

2可能的解决方案

  1. 简单方法:通过将ID设置为BIGINT无符号来扩展限制,就像Dan Armstrong所说的那样.虽然这并不意味着它牢不可破!当表变得非常大时,性能可能会受到影响.
  2. 更难的方法:使用分区,这是一种更复杂的方法,但提供更好的性能,并且真正没有数据库限制(您的唯一限制是物理硬盘的大小.).Twitter(以及类似的大型网站)每天使用这种方法来发送数百万条推文(记录)!