MySQL 特定情况下的计数器
MySQL counter for specific situations
我需要生成唯一的 "ids",问题是,它只能在 1 - 99999 之间。
"good" 事情是,它必须仅在与另一列的组中是唯一的。
我们有小组,每个小组都有自己的 "group_id",每个小组都需要 unique('group_id', 'increment_id')
99999 条记录现在对每个组来说足够几年了,但对所有组加在一起来说还不够,因此我不能只用 AUTO_INCREMENT 创建 table 并插入记录和取其自动增量。
例如,如果第一组需要 5 条记录,第二组需要 3 条记录,我想得到这样的结果:
group_id, increment_id
1, 1,
1, 2,
1, 3,
1, 4,
1, 5,
2, 1
2, 2,
2, 3
此外,冲突不是一个选项,因此如果以编程方式完成,使用 "length" 之类的东西可能会很棘手(即一次可以有 10 个请求,每个请求的第一个 select 长度对于给定的 group_id 然后尝试创建 10 行相同的 increment_id)
但是我在想 - 如果我将它设置为计数的 subselect 的值,那么它将永远是 "ok"?
您可以使用用户变量来获取每个 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
您可以创建一个辅助 table 命名计数器来管理:
table: 计数器
列:group_id、current_counter
或
每次插入一行 increment_id = select max(increment_id)+1 from table_xxx where group_id = group_xxxx
我需要生成唯一的 "ids",问题是,它只能在 1 - 99999 之间。
"good" 事情是,它必须仅在与另一列的组中是唯一的。
我们有小组,每个小组都有自己的 "group_id",每个小组都需要 unique('group_id', 'increment_id')
99999 条记录现在对每个组来说足够几年了,但对所有组加在一起来说还不够,因此我不能只用 AUTO_INCREMENT 创建 table 并插入记录和取其自动增量。
例如,如果第一组需要 5 条记录,第二组需要 3 条记录,我想得到这样的结果:
group_id, increment_id
1, 1,
1, 2,
1, 3,
1, 4,
1, 5,
2, 1
2, 2,
2, 3
此外,冲突不是一个选项,因此如果以编程方式完成,使用 "length" 之类的东西可能会很棘手(即一次可以有 10 个请求,每个请求的第一个 select 长度对于给定的 group_id 然后尝试创建 10 行相同的 increment_id)
但是我在想 - 如果我将它设置为计数的 subselect 的值,那么它将永远是 "ok"?
您可以使用用户变量来获取每个 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
您可以创建一个辅助 table 命名计数器来管理:
table: 计数器 列:group_id、current_counter
或
每次插入一行 increment_id = select max(increment_id)+1 from table_xxx where group_id = group_xxxx