如果在插入记录时MySQL中的int数据类型达到了限制,会发生什么?

6
尽管我在编程中经常使用,但从未意识到这个问题:
由于 int(unsigned) 数据类型可以保存从 0 到 4294967295 的值,那么如果我将此 INT 字段声明为自动递增,并且有一天早上,它恰好达到了 4294967295,会发生什么呢?
显而易见的答案是应该抛出无法继续插入的错误,但数据永远不会停止流入,我们必须存储仍在不断到来的记录。在这种情况下该怎么办?
另外,声明 int(20) 是否足够大于此默认限制?
您有什么建议吗?
谢谢。

2
20没有改变数据类型,只是用于填充。对于更大的整数,请使用BIGINT。 - Frank Heikens
2个回答

3

如果您有40亿行数据,字段溢出可能是最不必担心的问题。

您可以将其声明为BIGINT,它占用8个字节。这意味着它将计数到18446744073709551615。

如果它溢出,它将返回到0,并继续插入,在存在具有该数字的行的情况下返回错误。


1
我很感兴趣了解大型数据库的策略,特别是当它们有数十亿条记录时。我猜GUID或UUID可能是一个选择? - JPro
1
如果您只是想确保,自动递增的bigint是最好的选择。即使计算机一直在工作,填充1800万亿行也需要一些时间。更不用说它将占用的空间了。我认为从来没有一个应用程序有那么多的记录。也许是一个结构不良的DNA数据库,但我真的怀疑他们会那么愚蠢。 - Tor Valamo

0

使用BIGINT - 区间为0-18446744073709551615


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