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