【发布时间】:2014-01-18 23:09:37
【问题描述】:
假设我在表中有一个名为 tb_example 的字段,名为 id。此 id 具有 AUTO_INCREMENT 属性。因此,在每个新插入中,它都会像 1、2、3、...... 等等。
现在假设有 10 行 id 为 1-10 的数据。有人删除了id=5 所在的数据。现在对于下一个插入,我想在 position 5 NOT IN 11 中插入数据,而且我想在插入之前获得 unused id。这意味着我想获取未使用的 id 并使用查询插入下一个数据,如
"INSERT INTO tb_example .......... WHERE id=".$unused_id;
是否有可能通过任何简单的函数或进程来获得未使用的id? 还有可能在一个范围内获得未使用的id?就像我想知道在 100 到 200 之间是否存在任何未使用的 id?还是我需要用逻辑编码找到id?请帮忙....
【问题讨论】:
-
旁注:如果 MySQL 允许这样做,我会感到惊讶 - 您可能需要具有一些复杂的分配 ID 逻辑的常规列(并确保您正确处理“给/保留我”的多个请求最低未使用 id")
-
为什么要这样做?
-
@RafeKettler 我需要在现有的会计软件中处理他们的参考系统。
-
这将是慢,它只会捕获紧跟在现有 ID 前面的缺失 ID,但您可以尝试这种方法:
SELECT q.id + 1 FROM tb_example q WHERE NOT EXISTS (SELECT w.id FROM tb_example w WHERE w.id = q.id + 1) ORDER BY q.id ASC LIMIT 1。
标签: php mysql auto-increment