以自动递增的 6-8 模式生成唯一编号 mysql
Generate a unique number in a auto-incrementing 6-8 pattern mysql
假设我有 table,例如
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
等等。理想情况下,这将是自动递增的。做这个的最好方式是什么?我最初是通过暂存 table 来执行此操作的,我将在其中填充我通过 8 模式的函数生成的数字,然后根据暂存的计数自动递增数据库外部的 6 模式前缀 table 我在其中存储使用过的数字,然后将其截断为 rinse/repeat 但我想要一个更简单的自动递增解决方案。这可能吗?
我一直在阅读复合键,但由于我已经有一个不同的主键且未被使用,我不确定如何在当前方法之外执行此操作。
有什么想法吗?
您的前缀-后缀模式等同于普通整数主键。
假设您的后缀长度为一位数(而不是示例中的八位)。这将使解释更容易。
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)
(%
是模数或 "remainder" 运算符)和 prefix = (key - suffix) / (MAX_PREFIX + 1)
.
我推荐的做法是使用一个普通的自增主键,然后从中派生出 prefixes/suffixes,如上所示。如果您确实希望将这些派生列存储在数据库中,您可以使用 ON INSERT
触发器来填充这些列。
如果不允许使用主键,则使用普通的序列号即可。重要的是你不必担心"two values";无论您如何分解显示,这里都只有一个序列。
假设我有 table,例如
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
等等。理想情况下,这将是自动递增的。做这个的最好方式是什么?我最初是通过暂存 table 来执行此操作的,我将在其中填充我通过 8 模式的函数生成的数字,然后根据暂存的计数自动递增数据库外部的 6 模式前缀 table 我在其中存储使用过的数字,然后将其截断为 rinse/repeat 但我想要一个更简单的自动递增解决方案。这可能吗?
我一直在阅读复合键,但由于我已经有一个不同的主键且未被使用,我不确定如何在当前方法之外执行此操作。
有什么想法吗?
您的前缀-后缀模式等同于普通整数主键。
假设您的后缀长度为一位数(而不是示例中的八位)。这将使解释更容易。
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)
(%
是模数或 "remainder" 运算符)和 prefix = (key - suffix) / (MAX_PREFIX + 1)
.
我推荐的做法是使用一个普通的自增主键,然后从中派生出 prefixes/suffixes,如上所示。如果您确实希望将这些派生列存储在数据库中,您可以使用 ON INSERT
触发器来填充这些列。
如果不允许使用主键,则使用普通的序列号即可。重要的是你不必担心"two values";无论您如何分解显示,这里都只有一个序列。