我需要生成唯一的“is”,捕获的是,它只能在1- 99999之间。
“好”之处在于,它只能在与另一列组成的组中才是唯一的。
我们有组,每个组都有自己的"group_id“,每个组都需要类似于unique('group_id', 'increment_id')的东西。
现在99999条记录对于每个组来说已经足够了几年,但是对于所有的组来说还不够,所以我不能仅仅用AUTO_INCREMENT创建表,插入记录并自动递增。
例如,如果第一组需要5条记录,第二组需要3条记录,那么我应该得到如下内容:
group_id, increment_id
1, 1,
1, 2,
1, 3,
1, 4,
1, 5,
2, 1
2, 2,
2, 3此外,冲突不是一个选项,因此,如果以编程方式执行,使用类似" length“之类的东西可能会很棘手(一次可以有10个请求,每个请求首先为给定的group_id选择长度,然后尝试使用相同的increment_id创建10行)
但是我在想--如果我把它设置为计数的子选择的值,它就会永远是"ok“吗?
发布于 2017-02-22 18:54:02
您可以创建一个名为计数器的auxiliar表来管理该表:
表:计数器列: group_id、current_counter
或
每次插入一行时,increment_id =从table_xxx中选择max(increment_id)+1,其中group_id = group_xxxx
发布于 2017-02-22 18:52:48
您可以使用用户变量来获取每个group_id中的递增号:
select
t.*,
@rn := if(@group_id = group_id,
@rn + 1,
if(@group_id := group_id, 1, 1)
) increment_id
from (
select group_id
from your_table t
/* some where clauses */
order by group_id
) t
cross join (
select @rn := 0,
@group_id := - 1
) t2https://stackoverflow.com/questions/42399816
复制相似问题