我有一张看起来像这样的表
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个条目)。
谢谢
答案 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有关。