首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在自动递增6-8模式mysql中生成唯一的数字。

在自动递增6-8模式mysql中生成唯一的数字。
EN

Stack Overflow用户
提问于 2016-06-11 14:20:42
回答 1查看 793关注 0票数 1

让我说我有一张桌子。

代码语言:javascript
复制
id | memberName | memberPhoneNumber | prefix | suffix

我想要生成一个前缀和后缀,作为一个必须是6-8模式的复合键。我的主键仍然是id。这两列用作参考编号。

代码语言:javascript
复制
Prefix-Suffix
000000-00000000
000000-00000001
000000-00000002
...
000000-99999999
000001-00000000
000001-00000001
000001-00000002
...
567889-48329484

诸若此类。理想情况下,这将是自动递增。做这件事最好的方法是什么?我最初是通过一个暂存表来实现这一点的,在这个表中,我将填充通过8模式的函数生成的数字,然后根据存储所用数字的暂存表的计数,在数据库之外自动递增6模式前缀,然后截断它以清洗/重复,但我想要一个更简单的自动递增解决方案。这个是可能的吗?

我一直在阅读复合键,但是由于我已经有了一个不同的主键,不能使用,所以我不确定如何在我的当前方法之外完成这个任务。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-11 14:30:21

前缀-后缀模式相当于普通的整数主键.

假设您的后缀长度为1位(而不是示例中的8)。这将使解释更容易。

代码语言:javascript
复制
prefix  | suffix  |  key
000000  | 0       |  0
000000  | 1       |  1
000000  | 2       |  2
...
000000  | 9       |  9
000001  | 0       |  10
000001  | 1       |  11

如您所见,我们可以枚举所有前缀-后缀组合,并为每个前缀分配一个整数。

此外,考虑到这个整数,我们可以导出它对应的前缀-后缀组合:

代码语言:javascript
复制
key 57 = suffix 7, prefix 5
key 99 = suffix 9, prefix 9

如果我们使用8位数字的后缀,什么都不会改变。公式保持suffix = key % (MAX_PREFIX + 1) ( %是模或“余数”运算符)和prefix = (key - suffix) / (MAX_PREFIX + 1)

我建议做的是使用一个普通的自动增量主键,然后从它派生前缀/后缀,如上面所示。如果确实希望将这些派生列存储在数据库中,则可以使用ON INSERT触发器来填充这些列。

如果不允许使用主键,只需使用普通序列号即可。重要的一点是,您不必担心“两个值”;这里只有一个序列,不管您如何将其分解以供显示。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37764788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档