我有一个表,其中每一行都有一个id,每次我插入一个新行时,它都会获得最高的id并添加1.但是,我想要新的行来取回所有行的数字。删除。如何找到不存在的最低ID?谢谢
答案 0 :(得分:4)
您可以在同一张桌子上使用LEFT JOIN
,并查看下一个ID是否存在
我不认为这个解决方案对于很多行来说真的很好,但它可以工作:
SELECT (t.id + 1)
FROM `table` as t
LEFT JOIN `table` s ON s.id = (t.id + 1)
WHERE s.id IS NULL
ORDER BY t.id
LIMIT 1
答案 1 :(得分:3)
请勿重复使用以前使用的ID值。
示例场景:
自动增量值应唯一,但不需要连续。
32位有符号整数最多可以为2 31 -1或2147483647.一个64位有符号整数最多可以为2 63 -1,或9223372036854775807.您不可能用尽所有整数。
MySQL没有取最高值并添加1.它在序列中分配下一个值。由于插入失败,行被删除或正在回滚的事务,您可能缺少值。这个是正常的。如果您尝试解决它,您的应用程序将变得缓慢而复杂。您应该按照设计使用自动增量功能,并接受将存在一些不可避免的差距。
例外:如果重新启动MySQL服务,InnoDB的自动增量值将重置为MAX(id)+1。
答案 2 :(得分:0)
您可以使用AUTO_INCREMENT获取唯一增加的ID,但通常不会重复使用它们。重用旧值会带来什么好处?
参考:http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html
答案 3 :(得分:0)
试试这个:
select id+1
from users
where (id+1) not in (select id from users) limit 1
SQLFiddle:http://www.sqlfiddle.com/#!8/3e5a0/5
请注意,我同意其他人的意见,他们表示您应该决定这是否是一个好用的设计..如果您可以选择不重复使用数字,我强烈建议您这样做...