使用以下语句可以使表格重新排列,并填补空缺的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值进行自增
综上所述,两者缺一不可。