这有什么好的做法吗?
我希望我可以解决主键达到限制时的问题而不是避免它。因为这是我特定问题中会发生的事情。
如果这是不可避免的......我该怎么办?
这是mysql的问题,是不是Sybase sql出现同样的问题?
您应该为主键选择正确的类型,如果您知道有很多行,则可以使用bigint而不是常用的int。
在mysql中,您可以使用alter table语句轻松调整主键collumn以调整范围。 您还应该在该列上使用unsigned属性,因为自动增量主键始终为正。
当达到限制时,您可以创建一些算法来放入INSERT的ON DUPLICATE KEY UPDATE语句
为什么你会达到那个领域的极限?如果您使用足够大的数据类型定义它,它应该能够保存所有记录。
如果你使用unsigned bigint,你最多可以有18,446,744,073,709,551,615条记录!
好吧,取决于autoincrement列的数据类型。 Unsigned int最多可达4294967295。
如果要防止错误,可以检查上次自动增量值的值:LAST_INSERT_ID()
如果它接近数据类型的最大值,则不允许插入或以其他方式处理它。
除此之外,我只能建议您使用bigint,因此在大多数情况下几乎不能达到最大值。
不能给你一个万无一失的答案:)
我知道这个问题可能太旧了,但我也想回答。
实际上不可能使这种情况不可避免。只是认为人类能够制造多少存储驱动器存在物理限制。但这绝不可能填补所有可用存储空间。
正如其他人告诉你的那样,UNSIGNED BIGINT
能够处理18,446,744,073,709,551,615
记录,可能是“大多数”情况下的方式。
这是另一个想法:通过触发数据库的记录数(例如,85%已满),您可以将该表备份到另一个表/区域/数据库,并相应地扩展基础结构。然后重置该初始表。
我的最后一种方法是:一些公司选择对他们的许可证和使用协议进行微小的更改,如果用户没有登录一段时间(例如,免费用户6个月,6年),他们将关闭帐户对于专业用户,最终用户需要60年...... < - 嘿!你也可以使用不同的表格!)。
希望有人觉得这很有用。