复合(字母数字)主键和自动增量

时间:2011-06-29 19:18:41

标签: mysql sql primary-key auto-increment

是否可以在MySQL中组合使用alpha元素和数字的自动增量功能?

我有一个现有的系统,其中包括QAb99,QAb101,QAd9003等等。最大数字部分的范围是1到9999,而字母以QA开头,范围从QAa到QAd等,并最终通过QAd9999到QAe1等

管理SQL或SQL之外的新密钥(即php脚本)是否更好?

感谢。

2 个答案:

答案 0 :(得分:0)

MySQL自动增量始终为数字。您可以采取几种方法:

  • 在您的应用中实施自己的递增
  • 使用触发器
  • 使用字母数字键实现自动增量
  • 使用MySQL自动增量,然后让您的应用将数字转换为字母数字以供显示。
  • 如上所述,但使用视图进行MySQL转换。 (这将是单向的,因为我不相信MySQL支持代替触发器;请参阅http://bugs.mysql.com/bug.php?id=16525

您可能已经意识到,您可以将序列转换为数字并返回; 'a'到'z'只有0到250,000;如果你去加倍,那就是260,000。你有base-26系统,乘以10,000。

答案 1 :(得分:0)

我刚才问过这个问题。不幸的是,Mysql没有这样做。我喜欢它,但它没有。在PHP中你可以做到。例如:

public function random_id_gen($length)
    {
        //the characters you want in your id
        $characters = '23456789ABCDEFGHJKLMNPQRSTUVWXYZ';
        $max = strlen($characters) - 1;
        $string = '';

        for ($i = 0; $i < $length; $i++) {
            $string .= $characters[mt_rand(0, $max)];
        }

        return $string;
    }