如何重新编号主索引

Kam*_*zek 20 mysql sql

我有一个简单的MySQL表,主索引(id)没有逐个编号(1,31,35,100等).我想让它们编号为(1,2,3,4).请告诉我怎么做.我还想指出,我知道手术的可能后果,但我只是想整理一下.

kv.*_*kv. 46

我同意其他方法可行,但我只是提出了不同的想法.这将没有任何临时表创建要求::

SET @i=0;
UPDATE table_name SET column_name=(@i:=@i+1);
Run Code Online (Sandbox Code Playgroud)

  • 这样能保证保留原表记录的顺序吗?表中的各个记录可以按任意顺序更新,对吧?所以我想不一定要保留顺序。也许您应该附加“ORDER BY column_name”。 (3认同)
  • oFcourse,您必须更新自动增量;我错过了指定。ALTER TABLE TABLENAME auto_increment = <@a的值>; (2认同)

小智 15

尝试重新编号dalmp的方法(使用PHP的MySQL的DALMP数据库抽象层.)

$db->renumber('table','uid');
Run Code Online (Sandbox Code Playgroud)

基本上这样做:

SET @var_name = 0;
UPDATE Tablename SET ID = (@var_name := @var_name +1);
ALTER TABLE tablename AUTO_INCREMENT = 1
Run Code Online (Sandbox Code Playgroud)


Mor*_*dur 5

最简单的解决方案是:

  • 将表重命名为 tablename_temp
  • 创建一个具有旧名称和相同结构的新表
  • INSERT INTO tablename (id, field1, field2, field3) SELECT NULL, field1, field2, field3, ... FROM tablename_temp;
  • 删除 tablename_temp

如果您使用外键,这将破坏您的所有数据,我强烈建议您将 ID 保持原样。数据库不是乱七八糟的,因为主键没有顺序,如果它的引用完整性(id 值指向其他表中错误或不存在的行)被破坏,则数据库是乱七八糟的。