ZVVQ代理分享网

mysql的自增主键用完会怎么样?

作者:zvvq博客网
导读作为最常用的关系数据库,MySQL是应用和面试中必须掌握的技能。我们知道自然数没有上限,但是MySQL的自增主键会设置字节长度,但是如果有字节长度,就会有上限。程序员没有设置自

作为最常用的关系数据库,MySQL是应用和面试中必须掌握的技能。

MySQL自增主键会用完吗?

当我们使用MySQL设置的自增主键时,我们通常会定义初始值和定义步长。我们知道自然数没有上限,但是MySQL的自增主键会设置字节长度,但是如果有字节长度,就会有上限。

MySQL自增主键用完会怎么样?

无论我们设定多长的字节,如果假设MySQL运行时间足够长,那么它肯定会用完,对于MySQL,有两种情况:

程序员自己设置的自增主键。

毫无疑问,当数值达到最大值时,从增加的主键中获得的仍然是最大值,插入时会报告主键冲突。这是在server层实现的。

程序员没有设置自增主键,mysql自动创建row_id。

这里需要注意的是,MySQL中的row_id是在发动机层中实现的,在InnoDB代码中会创建一个长度为的看不见的自增字段row_id,步长为,但InnoDB在实现时只给这个字段分配个字节的空间长度,所以在保存数据时只能取row_id字段的最后个字节来保存,我们知道个字节的最大值是的次方,如果已经达到这个值,再次插入数据时,row_id是的次方加,从这个值中取最后个字节正好为0,而在InnoDB的实现逻辑中,如果row_id重复,原始数据将被覆盖,而不是主键冲突。

如今您应该知道mysql的自增主键是有上限的,在达到上限之后就会出现上述现象。

上一篇:没有了

下一篇:MRR的内部工作原理,你知道吗?