01_解决MySQL自增id不连续问题

使用以下语句可以使表格重新排列,并填补空缺的ID:

如图所示,这是一张经过删除后,uid号排列不全的表 

第一步: 执行以下代码,目的是将当前表中的uid号重新排列

SET @count = 0;
UPDATE table_name SET id = @count:= @count + 1; 

 

第二步: 执行以下代码,目的是让以后再插入表中的uid号码延续为:第一步执行后的最后一个uid号码+1

ALTER TABLE table_name AUTO_INCREMENT = 1;
SET @count = 0;
UPDATE table_name SET id = @count:= @count + 1;

 

其中,table_name是表名,SET id中的id是自动自增的主键的字段名

AUTO_INCREMENT = 1是下一条数据从1开始自增

注意: 如果直接执行第二步,不执行第一步的话,结果是这样:

执行前:

执行后:虽然也重新排序了,但是ALTER TABLE table_name AUTO_INCREMENT = 1;

是按照uid号重置前的表生效的。

执行后再插入数据:

你会发现,新添加的uid,还是在延续以前的uid号,在35的情况下+1变为36

因为

ALTER TABLE table_name AUTO_INCREMENT = 1;
SET @count = 0;
UPDATE table_name SET id = @count:= @count + 1;

这条代码段执行的时候,表格还没有重置

所以,必须在执行完第一步后,把表格的uid重置后,再执行第二步,将后续添加数据按照新表的uid延续。

代码解析:

ALTER TABLE table_name AUTO_INCREMENT = 1;
//这条SQL语句用于修改名为 table_name 的表,将主键列(通常为 id)的自增值重新设为1。
//这意味着下一个插入表中的行将具有 id 值为1,随后的行将以此递增。


SET @count = 0;
//这条SQL语句将值0赋给MySQL用户定义变量 @count。
//MySQL中的用户定义变量以@符号开头,并可用于在会话中临时存储值。


UPDATE table_name SET id = @count:= @count + 1;
//这条SQL语句通过将 id 列设置为表 table_name 中 @count := @count + 1表达式的值来更新该列。
//这里,@count := @count + 1 是一个MySQL赋值运算符,在每次更新时都会将 @count 的值加1。
//结果是,id 列将被从1开始依次更新,每行的值均递增。

总结:

1. 第一步执行的代码段,作用于当前的表,对表中现有的数据的uid进行重新整理。

2. 第二步执行的代码段,作用于以后插入的数据,要按照表的最后一个uid值进行自增

综上所述,两者缺一不可。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七色的天空

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值