当AUTO INCREMENT达到极限时,如何处理问题?

问题描述 投票:4回答:4

这有什么好的做法吗?

我希望我可以解决主键达到限制时的问题而不是避免它。因为这是我特定问题中会发生的事情。

如果这是不可避免的......我该怎么办?

这是mysql的问题,是不是Sybase sql出现同样的问题?

mysql limit auto-increment
4个回答
1
投票

您应该为主键选择正确的类型,如果您知道有很多行,则可以使用bigint而不是常用的int。

在mysql中,您可以使用alter table语句轻松调整主键collumn以调整范围。 您还应该在该列上使用unsigned属性,因为自动增量主键始终为正。

当达到限制时,您可以创建一些算法来放入INSERT的ON DUPLICATE KEY UPDATE语句


3
投票

为什么你会达到那个领域的极限?如果您使用足够大的数据类型定义它,它应该能够保存所有记录。

如果你使用unsigned bigint,你最多可以有18,446,744,073,709,551,615条记录!


0
投票

好吧,取决于autoincrement列的数据类型。 Unsigned int最多可达4294967295。

如果要防止错误,可以检查上次自动增量值的值:LAST_INSERT_ID()

如果它接近数据类型的最大值,则不允许插入或以其他方式处理它。

除此之外,我只能建议您使用bigint,因此在大多数情况下几乎不能达到最大值。

不能给你一个万无一失的答案:)


0
投票

我知道这个问题可能太旧了,但我也想回答。

实际上不可能使这种情况不可避免。只是认为人类能够制造多少存储驱动器存在物理限制。但这绝不可能填补所有可用存储空间。

正如其他人告诉你的那样,UNSIGNED BIGINT能够处理18,446,744,073,709,551,615记录,可能是“大多数”情况下的方式。

这是另一个想法:通过触发数据库的记录数(例如,85%已满),您可以将该表备份到另一个表/区域/数据库,并相应地扩展基础结构。然后重置该初始表。

我的最后一种方法是:一些公司选择对他们的许可证和使用协议进行微小的更改,如果用户没有登录一段时间(例如,免费用户6个月,6年),他们将关闭帐户对于专业用户,最终用户需要60年...... < - 嘿!你也可以使用不同的表格!)。

希望有人觉得这很有用。

© www.soinside.com 2019 - 2024. All rights reserved.