强制添加未使用旧已删除行的auto_increment ID的新行

时间:2012-09-10 17:24:31

标签: mysql sql

我们举个例子:

id (auto_increment)   user
1                     John
2                     Mary
10                    Christopher

如何强制查询添加未使用users的新ids? :在我们的案例中从3到9:

2 个答案:

答案 0 :(得分:2)

通过将要插入的记录的ID设置为表的第一个“缺失”ID值,可以使用一些聪明的SQL来执行此操作:

INSERT INTO myTable (id, user) 
VALUES 
(
   (SELECT MIN(mt2.id)+1 from myTable mt2 WHERE NOT EXISTS 
         (SELECT 'Y' from myTable mt3 where mt3.Id = mt2.id + 1)), 
   'New User Name'
)

您可能无法在一个查询中执行此操作,具体取决于DBMS。这种方法也几乎使得Id列成为“自动生成”列无用;这个插入总是会找到没有ID的最小值,无论是否是身份生成器尝试使用的那个,你几乎总是必须在插入表之前启用“identity insert”,所以永远不会使用此表上的自动生成功能。

答案 1 :(得分:0)

这个怎么样:

/*!40000 ALTER TABLE `mytable` DISABLE KEYS */;
INSERT INTO `mytable` (`id`,`col1`) VALUES (1,'mydata');
/*!40000 ALTER TABLE `mytable` ENABLE KEYS */;

更简单的IMO。由MySQL Admin GUI工具生成。