MYSQL +更新ID列

时间:2012-03-16 07:55:34

标签: 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'只是一个从1开始递增的数字。

'idkey'目前在我删除的条目的编号方面存在差距,我想看看是否可以运行MySQL命令重新编写此列,因此编号中没有间隙。

例如:重写它,使其从1开始并一直运行到最后(约1400个条目)。

谢谢

2 个答案:

答案 0 :(得分:1)

尝试填写这些“缺失的数字”是违反标准做法的。你需要考虑他们曾被分配给某事。现在将它们分配给其他东西可能会导致问题 - 特别是如果您没有使用外键约束并且存在一些不良数据。

如果您处于测试某些数据并且现在想要处于活动状态的情况,您可以通过运行Alter Table TABLENAME AUTO_INCREMENT=1(或任何其他数字)来重置自动增量,或者您可以删除并重新创建表格。如果它已经投入生产,我建议不要重置或试图“填补空白”。

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

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

INSERT INTO 
    newtable (column2, column3, column4,...) 
VALUES 
    SELECT column2, column3, column4,... FROM oldtable;

删除旧表并重命名新表。将填补空白,您的自动增量编号将位于“正确”位置。

但你真的应该从删除的记录中留下空白。

答案 1 :(得分:0)

是的,你可以做到这一点,因为每一行的主键是单一的,如果你的列是自动增量,那么你可以做到这一点,你可以做到这一点。但是你问的是关于row entery但是语法与create table有关。