如果我需要一个非常非常大的自增ID,该怎么办?

16
根据MySQL官网,signed bigint 可以达到18446744073709551615。如果我需要一个比这更大的数字用于自增主键呢?

9
需要一个真实的例子,说明何时需要使用这个(技术/工具/方法),并且该例子已经涉及到一个非常大的数字。 - Shakti Singh
3
我想不到任何理论上需要这样做的情况……但如果确实需要,就使用一个自己增加的字符串吧。无论如何,任何数据库都会在达到那么多行之前崩溃。 - Mikecito
3个回答

105

如果您每秒钟24小时插入100万条记录,需要584542年才能达到限制。

那时我希望MySQL的下一个版本支持更大的ID列 :)


2
实际的“数学”是18446744073709551615 /(1000000 * 60 * 60 * 24 * 365.25),非常简单:一百万,一分钟60秒,一小时60分钟,一天24小时,一年365天(再加上四分之一的闰年,不是必要的)。这根本不需要任何思考。 - 9000
那个表达式的答案是58.45420460906263年,而不是584542年,对吗? - Jason
@Jason:我不明白怎么可能。我仍然认为每秒填充一亿个64位计数器将需要超过584千年。这就是重点:虽然64位肯定有限,但对于实际目的而言,它是无限的。 - 9000
也许我应该在别处询问。但我尝试使用 Windows 上的“计算器”和 MS Excel,它们都无法容纳那18446744073709551615这么大的数字。你们用什么工具?C++? - Fandi Susanto
1
@FandiSusanto:对于这种草稿计算,我个人会使用pythonirbghci或者bc,具体取决于手头有哪些工具。抱歉,我从不使用calc.exe。虽然bash使用$(( ))或者elisp也无法处理这种计算,因为很多这样的工具都受限于它们所运行的架构的intlong int的大小。 - 9000

17

有这么多个数字(从1到18446744073709551615),你可以为地球上所有的动物分配一个唯一的ID号码:)


2

我猜你现在很难办?你可以取消MySQL的自动递增,使用一个自己递增的base 64数字。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接