我有自动增量,MySQL中的主键叫做ID,它是INT。 随着我的应用程序的增长,我收到更多用户,他们正在制作更多条目。当我的INT达到最大值2 147 483 647时会发生什么? 我可以切换到BIGINT吗?
答案 0 :(得分:4)
MySQL
official documentation表示:
当列达到数据类型的上限时,下一个 尝试生成序列号失败。使用UNSIGNED 属性,如果可能允许更大的范围。
是的,您可以切换auto_increment
值的类型。在这一点上,文档建议使用:
[...] AUTO_INCREMENT列的最小整数数据类型 它足够大,可以保存你需要的最大序列值。
答案 1 :(得分:4)
是的,您可以更改表格并从INT更改为BIGINT而不会出现问题。
此外,您可能需要将数据类型更改为FK
答案 2 :(得分:0)
我想分享一下我刚才的个人经历。
使用Nagios + Check_MK + NDOUtils。 NDOUtils将所有检查存储在名为nagios_servicechecks的表中。主键是auto_increment int signed
。
当此限制为范围时,MySQL会发生什么?好吧,在我的情况下,MySQL删除了所有记录,但最后一个。桌子现在几乎是空的。每次插入新记录时,旧记录都将被删除。
我不知道为什么会这样,但事实是我丢失了所有记录。
与Icinga(不是Nagios)一起使用的IDOUtils修复了这个问题,由bigint改变了int。