我在MySQL中有一个名为ID的自增主键,它是INT类型。随着我的应用程序越来越受欢迎并且有更多的用户进行更多的条目插入,当我的INT值达到最大值2147483647时会发生什么?
我是否可以切换到BIGINT?
我在MySQL中有一个名为ID的自增主键,它是INT类型。随着我的应用程序越来越受欢迎并且有更多的用户进行更多的条目插入,当我的INT值达到最大值2147483647时会发生什么?
我是否可以切换到BIGINT?
是的,您可以更改表并将数据类型从INT更改为BIGINT而不会出现问题。
此外,您可能需要在任何作为外键的地方更改数据类型。
MySQL
官方文档指出:
当列达到数据类型的上限时,下一次尝试生成序列号将失败。如果可能,请使用UNSIGNED属性以允许更大的范围。
是的,您可以切换auto_increment
值的类型。在这一点上,文档建议使用:
[...]最小的整数数据类型作为AUTO_INCREMENT列,其足够大以容纳您需要的最大序列值。
我想分享一下我刚刚遇到的个人经历。
使用Nagios + Check_MK + NDOUtils。NDOUtils将所有检查存储在名为nagios_servicechecks的表中。主键是一个auto_increment int signed
。
当MySQL达到此限制时会发生什么?好吧,在我的情况下,MySQL删除了除最后一个记录之外的所有记录。该表现在几乎为空。每次插入新记录时,旧记录都会被删除。
我不知道为什么会发生这种情况,但事实是我失去了所有记录。
IDOUtils与Icinga(而不是Nagios)一起使用,通过将int更改为bigint来解决了此问题。
pk-full-ratio.sql
和int-full-ratio.sql
。 - Bill Karwin