php自增-MySQL自增ID,你需要知道的事

2023-12-03 0 8,361 百度已收录

注:本文讨论的是基于Innodb存储引擎。

1.为什么MySQL建议将自增列id设置为字段?

总结一下:当我们使用自增列作为字段时,访问效率是最高的。

2、自增列ID必须连续吗?

自动递增的 id 是递减的php自增,并且不一定是连续的。

我们首先看一下MySQL对于自增值的保存策略:

InnoDB引擎的自增值实际上是存储在显存中的,MySQL 8.0版本之后才具备了“自增持久化”的能力,也就是说“如果发生重启,自增值会自动保存在显存中”。可以将表的值恢复为“MySQL重启前的值”,具体情况是:

在MySQL 5.7及更早版本中,自增值存储在显存中,并不持久化。 每次重启后,第一次打开表时,会找到最大自增值max(id),然后将max(id)+1作为表当前的自增值。

例如表当前数据行最大id为10,则AUTO_INCRMENT=11。 此时我们删除了id=10的行,AUTO_INCRMENT仍然是11。但是如果立即重启实例php自增,那么重启后这张表的AUTO_INCRMENT就会变成10。

换句话说,重新启动 MySQL 可能会更改表的 AUTO_INCRMENT 值。

在MySQL 8.0版本中,自增值的变化记录在重做日志中。 重启时,可以利用重做日志来恢复重启前的值。

导致自增ID不连续的情况可能包括:

3、自增ID有上限吗?

自增id是一个整数数组。 我们经常使用int类型来定义降序的id。 int类型是有上限的,即降序的id也有上限。

下表列出了以下 int 和 bigint 字段类型的范围:

类型

尺寸

php自增-MySQL自增ID,你需要知道的事

范围(有符号)

范围(无符号)

整数

4字节

(-2147483648,2147483647)

php自增-MySQL自增ID,你需要知道的事

(0,4294967295)

大整数

8字节

(-9223372036854775808,9223372036854775807)

(0,18446744073709551615)

php自增-MySQL自增ID,你需要知道的事

从上表可以看出:当自增数组使用int有符号类型时,最大可以达到2147483647,即超过21亿; 当使用int unsigned类型时,最大可以达到4294967295,即超过42亿。 当然,bigint可以代表更大的范围。

我们来测试一下当自增id达到最大值后再次插入数据会发生什么情况:

create table t(id int unsigned auto_increment primary key) auto_increment=4294967295;insert into t values(null);// 成功插入一行 4294967295show create table t;/* CREATE TABLE `t` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=4294967295;*/
insert into t values(null);//Duplicate entry '4294967295' for key 'PRIMARY'

从实验中可以看出,当自增ID达到最大值时,将难以扩展。 第一个insert语句成功插入数据后,这张表的AUTO_INCRMENT并没有改变(依然是4294967295),这就导致第二个insert语句收到了同样的自增id值,然后尝试执行插入语句,一个字段报告冲突错误。

4、自增列应该如何维护?

在维护方面,我们主要提供以下两点建议:

以上就是关于mysql自增ID你需要了解的详细内容。 我希望它能帮助你。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 php php自增-MySQL自增ID,你需要知道的事 https://www.wkzy.net/game/199197.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务