针对特定情况的 MySQL 计数器

标签 mysql increment auto-increment

我需要生成唯一的“ids”,问题是,它只能在 1 - 99999 之间。

“好”的是,它仅在与另一列组合时必须是唯一的。

我们有组,每个组都有自己的“group_id”,每个组都需要类似 unique('group_id', 'increment_id')

现在 99999 条记录对于每个组来说足够使用几年,但对于所有组来说还不够,因此我不能只使用 AUTO_INCRMENT 创建表并插入其中记录并获取其自动增量。

例如,如果我需要第一组 5 条记录和第二组 3 条记录,我想得到如下结果:

group_id, increment_id
1, 1,
1, 2,
1, 3,
1, 4,
1, 5,
2, 1
2, 2,
2, 3

此外,冲突不是一个选项,因此,如果以编程方式完成,使用“长度”之类的东西可能会很棘手(即一次可能有 10 个请求,每个请求首先选择给定 group_id 的长度,然后尝试创建10 行具有相同的increment_id)

但是我在想 - 如果我将其设置为 count 的子选择的值,那么它总是“ok”?

最佳答案

您可以创建一个名为 counters 的辅助表来管理它:

表:计数器 列:group_id、current_counter

每次插入行increment_id = select max(increment_id)+1 from table_xxx where group_id = group_xxxx

关于针对特定情况的 MySQL 计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42399816/

相关文章:

mysql - Order by 子句混淆

php - mysqli 无法向 mysql 数据库插入和更新查询

javascript - 单击时以增量方式旋转图像

c - 为什么这些构造使用增量前和增量后未定义的行为?

mysql - 处理缺乏第二列自动增量支持的 InnoDB 的正确方法是什么?

mysql - 计算时间值的百分比是0 vs 1

java - 我试图通过 spring 框架将图像路径存储在 mysql 数据库中...但无法做到这一点.. :/

c - foo(x++, y)::x 是否总是在作为参数发送后递增?

php - 从表#1 获取最新 ID 以确定表#2 的新 ID

ios - 在 Core data iOS 中设置自动增量