MYSQL+;更新ID列

MYSQL+;更新ID列,mysql,Mysql,我有一张像这样的桌子 CREATE TABLE IF NOT EXISTS `language` ( `idkey` int(10) unsigned NOT NULL AUTO_INCREMENT, `english_lang` text, `japanese_lang` text, PRIMARY KEY (`idkey`), ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1587 ; “idkey”只是

我有一张像这样的桌子

CREATE TABLE IF NOT EXISTS `language` (
   `idkey` int(10) unsigned NOT NULL AUTO_INCREMENT,
   `english_lang` text,
   `japanese_lang` text,
   PRIMARY KEY (`idkey`),
 ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1587 ;
“idkey”只是一个从1开始递增的数字

“idkey”当前在我删除的条目的编号中有间隙,我想看看是否可以运行MySQL命令来重新写入此列,以便编号中没有间隙

重写它,让它从1开始,运行到最后(大约1400个条目)


谢谢

试图填写这些“缺失的数字”是违反标准的做法的。你需要考虑他们曾经被分配到某物。现在将它们分配给其他对象可能会导致问题——特别是当您没有使用外键约束并且有一些坏数据存在时

如果您测试了一些数据,现在想让数据生效,您可以通过运行
Alter Table TABLENAME auto_increment=1
(或任何其他数字)重置自动增量,也可以删除并重新创建该表。如果已经投入生产,我建议不要重新设置或尝试“填补空白”

出于完整性考虑,我相信您可以通过将特定数字包含在insert语句中,在通常自动递增的列中插入特定数字。下一个自动递增数字应该从您指定的数字中选取。如果它已经采取这将导致你的问题

如果您真的只想缩小差距,最简单的方法是创建一个具有相同结构的新表。然后运行如下查询:

INSERT INTO 
    newtable (column2, column3, column4,...) 
VALUES 
    SELECT column2, column3, column4,... FROM oldtable;
删除旧表并重命名新表。间隙将被填补,自动递增编号将位于“正确”位置


但实际上,您应该保留已删除记录的间距。

是的,您可以这样做,因为每行的主键都是单键,如果列是自动递增的,则您不能这样做,您可以手动执行。但您询问的是行输入,但语法与创建表有关。

看起来idkey应该是主键,通常情况下,开始对主键重新编号不是个好主意。你这样做有什么特别的原因吗?这个表是一个静态表,它所涉及的网站也还在开发中。而且主键与其他任何内容都不相关。我只是想在上线前修复排序,但很难手动完成,因为日语的_lang文本字段是unicode格式的,并且在我尝试在大多数编辑器中手动更新时,这些值都丢失了。。。另外,更新1400个数字也需要很长时间。。。很高兴有。。。希望有人知道一个简单的MySQL更新命令,能够重新编写这样的专栏…完美的答案。不要填补空白,因为其中有意义(曾经有过一些东西)。理解-但是表不是活动的,键与任何东西都没有关系。尝试使用alter table命令,但编号仍然是零碎的……alter table命令只会将其返回到您指定的任何位置,因此下一个ID将从此处拾取。它不会自动选择下一个空ID。最简单的方法是创建一个具有相同结构的新表,然后插入当前表中减去ID列的数据。我会把它添加到答案中。谢谢你,我会记得留下空白。。。感激