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列的数据。我会把它添加到答案中。谢谢你,我会记得留下空白。。。感激