【问题标题】:Generate a unique number in a auto-incrementing 6-8 pattern mysql在自动递增的 6-8 模式 mysql 中生成唯一编号
【发布时间】:2016-06-11 14:20:42
【问题描述】:

假设我有一张桌子,例如

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

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

有什么想法吗?

【问题讨论】:

    标签: mysql sql key composite-key


    【解决方案1】:

    你的前缀-后缀模式相当于一个普通的整数主键。

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

    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 触发器来实现。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-21
      • 2017-11-07
      • 2016-09-27
      • 2011-07-24
      • 1970-01-01
      • 2015-08-28
      • 2011-01-10
      • 1970-01-01
      相关资源
      最近更新 更多