1

让我们举个例子:

id (auto_increment)   user
1                     John
2                     Mary
10                    Christopher

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

4

2 回答 2

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 的最小值,无论它是否是身份生成器会尝试使用的值,并且您几乎总是必须在插入表之前启用“身份插入”,所以永远不会使用此表上的自动生成功能。

于 2012-09-10T17:32:26.053 回答
0

那这个呢:

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

更简单的国际海事组织。由 MySQL Admin GUI 工具生成。

于 2013-05-27T07:15:39.697 回答