当自动递增ID溢出时,MySQL会做什么?

时间:2009-10-16 23:43:36

标签: sql mysql

我有一个使用MySQL作为数据库后端的django应用程序。它已经运行了几天,我已经在一些表中达到了ID 5000。

我担心当我溢出数据类型时会发生什么。

有没有告诉自动增量在某个时刻开始?我的数据非常不稳定,因此当我溢出ID时,ID 0或其附近的任何地方都无法使用。

2 个答案:

答案 0 :(得分:5)

根据您是否使用无符号整数以及您正在运行的MySQL版本,您可以运行获取主键的负值的溜冰场,或者(更糟糕的是)该行不会被插入并会抛出错误。

也就是说,您可以使用ALTER命令轻松更改MySQL中整数的大小/类型,以抢先阻止这种情况发生。用作主键的INT的“标准”大小是INT(11),但是绝大多数DB应用程序不需要任何接近那么大的东西。试试MEDIUMINT。

  

MEDIUMINT - 有符号范围是-8388608到8388607.无符号范围是0到16777215

与....相比。

  

INT或INTEGER - 有符号范围是-2147483648到2147483647.无符号范围是0到4294967295

还有BIGINT,但说实话,你可能会遇到比你的数据类型更大的可扩展性问题,如果你有一个带有>的表,你会担心20亿行:)

答案 1 :(得分:-3)

嗯,默认的32位INT上升到大约20亿。每天5000个ID,大约1000年,直到溢出。我觉得你不用担心......