以自动递增6-8模式生成唯一编号mysql

问题描述:

假设我有一个表格,例如以自动递增6-8模式生成唯一编号mysql

id | memberName | memberPhoneNumber | prefix | suffix 

我想生成一个前缀和后缀作为必须是6-8模式的组合键。我的主键仍然是ID。这两列用作参考号码,例如,

Prefix-Suffix 
000000-00000000 
000000-00000001 
000000-00000002 
... 
000000-99999999 
000001-00000000 
000001-00000001 
000001-00000002 
... 
567889-48329484 

依此类推。理想情况下,这会自动递增。做这个的最好方式是什么?我最初是通过一个登台表来完成这个工作,我将填入一个我通过8模式的函数生成的数字,然后根据我存储的登台表的数量自动递增数据库之外的6模式前缀使用的数字,然后截断它冲洗/重复,但我想要一个更简单的自动递增解决方案。这可能吗?

我一直在阅读组合键,但由于我已经有一个主键是独特的,不会被使用,我不确定我如何能够做我的当前方法之外。

有什么想法?

您的前缀后缀模式相当于一个正常的整数主键。

想象一下,你有一个数字的后缀长度(而不是你的例子中的八个)。这将使解释更容易。

prefix | suffix | key 
000000 | 0  | 0 
000000 | 1  | 1 
000000 | 2  | 2 
... 
000000 | 9  | 9 
000001 | 0  | 10 
000001 | 1  | 11 

正如你所看到的,我们可以列举所有的前缀后缀组合和分配每一个整数。

更重要的是,考虑到整数,我们可以推导出前缀后缀组合,它所对应:

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触发器来完成此操作。

如果您不允许使用主键,只需使用正常的序列号即可。重要的是你不必担心“两个价值”。这里只有一个序列,无论你如何分解显示。