在自动递增的6-8模式mysql

时间:2016-06-11 14:20:43

标签: mysql sql key composite-key

假设我有一张桌子,例如

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模式前缀使用过的数字,然后截断它来冲洗/重复,但我想要一个更简单的自动递增解决方案。这可能吗?

我一直在阅读复合键,但由于我已经有一个不同的主键,不能使用,我不确定如何在我当前的方法之外做到这一点。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您的前缀后缀模式等同于普通的整数主键。

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

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触发器来填充这些列。

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