当前位置: 首页 > 图灵资讯 > 技术篇> MySQL自增主键id重启后重复使用问题解析

MySQL自增主键id重启后重复使用问题解析

来源:图灵教育
时间:2023-08-09 11:48:33

随着业务数据的增长,MySQL表的主键ID也将继续增加。如果在此过程中删除部分数据,MySQL重启后插入数据。自添加的主键ID会重复使用吗?本文将通过具体示例分析MySQL自添加的主键ID重启后是否重复使用的问题。

首先,设置初始试验表的结构

首先,在这里创建一个测试表:sqlCREATE TABLE t(id INT AUTO_INCREMENT,num INT,PRIMARY KEY (id));它包含自添加的主键id和num字段。

2.插入和删除测试数据

接下来插入1-17条记录:sqlINSERT INTO t(num) VALUES (1);...INSERT INTO t(num) VALUES (17);然后删除最后三个记录,即id=15、16、17的数据:sqlDELETE FROM t WHERE id IN (15, 16, 17);查询表记录,目前id应从1-14记录:sqlSELECT * FROM t;

三、重启MySQL服务,插入新记录

然后重新启动MySQL服务器,然后插入新的记录,测试插入记录的id值:sqlINSERT INTO t(num) VALUES (18);SELECT * FROM t;

可以看出,重启MySQL后插入的新记录id为18,未重复使用已删除的15、16、17。

四、原理分析

为什么MySQL自增主键id重启后不重复使用?这是因为MySQL会记录自增id的最大值,即auto_increment值,它实际上存储在信息架构表中:sqlSHOW TABLE STATUS LIKE 't\G我们可以看到,目前auto_increment的值为18,是表中下一个可用id的最大值。MySQL服务器重启后,将读取信息架构表中的auto_increment值,以确定下一个自添加id,以避免已使用的id重复分配问题。

五、自增主键优化策略

我们还可以通过以下措施优化自增主键id:

  1. OPTIMIZEE定期使用 TABLE重建表,自添id回收删除记录
  2. 通过设置更大的自增长长度,id增长缓慢
  3. 分表分库后,控制每个表的自增idincrement,避免单表过大
  4. vivo_tmp_xxx临时表可用于生成id,避免影响在线表的自增值
六、总结

MySQL的自添加主键id在重启后不会重复使用已删除的id,这是由其自动保存和恢复auto_increment值的机制保证的。然而,过度删除会导致自添加id的快速增长,需要通过优化策略来避免。

上一篇:

idea常用插件

下一篇:

数据结构java版 课设