【问题标题】:Find a range of unused primary key to create product numbers in batch查找一系列未使用的主键批量创建产品编号
【发布时间】:2014-12-05 02:57:58
【问题描述】:

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

我有一个只有主键数字的表,名为 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... 这将是最后输入的产品。

批次产品必须有连续编号。

是否有任何查询可以给出该结果?

提前谢谢你!

【问题讨论】:

标签: mysql sql


【解决方案1】:

此查询应使用 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 

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

请注意,在具有高需求和许多同时插入的上下文中填充主键中的空白将是一个坏主意,因为它会序列化所有事务。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-18
    • 2015-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 2023-02-02
    • 2022-01-20
    相关资源
    最近更新 更多