我们举个例子:
id (auto_increment) user
1 John
2 Mary
10 Christopher
如何强制查询添加未使用users
的新ids
? :在我们的案例中从3到9:
答案 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工具生成。