查找一系列未使用的主键以批量创建产品编号

时间:2014-10-10 02:19:20

标签: mysql sql

我正在尝试找到一种识别空键范围的方法。

我有一个表只有主键数,名为id

我正在努力填补收到一批产品的空白。

我的专栏id(小组)的数字可以互相跟随,但是对于每种产品类型,我们会跳到另外几千名,而且有些员工没有遵循下一个免费广告的规则,他们发现一个空的用它!

我需要找到具有类似功能的东西:

select product.id
from product
where product.id >= x
and next product.id > x + y  
  • x将是最后使用的产品
  • y是我必须填写此批次的产品数量。

例如;如果x是我的起点并且值为25000且y = 50, 50个未使用的数字首次达到26600至27500.

结果会给我25999 ......这将是最后输入的产品。

批量产品必须具有连续的数字。

是否有任何查询可以提供该结果?

提前谢谢你!

1 个答案:

答案 0 :(得分:0)

此查询应使用50作为所需大小产生第一个合适的间隙。 请注意,您应该查询间隙并在同一事务中插入批处理,以防止其他人同时使用相同的间隙。

select a.id+1
  from yourtable a 
 where not exists (select id from yourtable where id between a.id+1 and a.id+50)
order by a.id
limit 1 

如果表为空,则此查询将不返回任何行。

请注意,在需求量大且同时插入多个上下文中填补主键空白是一个坏主意,因为它会序列化所有事务。