我需要生成唯一的" ids",捕获量可以在1-99999之间。
"好"的事情是,它必须仅与另一列的组中唯一独特。
我们有小组,每个组都有自己的" group_id",每个组都需要unique('group_id', 'increment_id')
99999的记录现在已经足以容纳每个组的几年,但是对于所有组来说还不够,因此,我不能只用auto_increment创建表,并在此处插入记录并进行自动增量。
。例如,如果我需要5组和第二组的第三个记录记录,我想得到这样的东西:
group_id, increment_id
1, 1,
1, 2,
1, 3,
1, 4,
1, 5,
2, 1
2, 2,
2, 3
另外,冲突不是一个选项,因此使用诸如"长度"之类的东西可能很棘手,如果可以通过编程完成(即一次有10个请求,每个请求首先选择给定的Group_id的长度,然后尝试创建10行与相同的递增_id)
但是我在想 - 如果我将其设置为计数子选择值,那么它将始终是"确定"?
您可以创建一个名为Counters的辅助表来管理:
表:计数器列:group_id,current_counter
或
每次插入一行regrement_id = select oflect group_xxx where group_id = group_xxxx
您可以使用用户变量在每个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
) t2