2011-06-29 59 views
0

是否可以在MySQL中组合使用alpha元素和数字的自动递增函数?复合(字母数字)主键和自动增量

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

是否更好地管理SQL或SQL以外的生成新密钥(即PHP脚本)?

谢谢。

+0

可能重复的[MySQL的自动递增的字母数字的主键??](http://stackoverflow.com/questions/6444355/mysql-auto-incrementing-alpha-numeric-primary-key ) –

+0

@fbas:如果您不介意使用MyISAM,则可以使用复合auto_incrementing键。在这个问题中看到我的答案:http://stackoverflow.com/questions/5455436/creating-primary-key-based-on-date/5455513#5455513 –

回答

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; 
    } 
0

MySQL自动增量总是数字。有几个方法,你可以采取:

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

正如你可能知道,您可以将序列转换为数字和后面; 'a'到'z'只是0到250,000;如果你去加倍,那就是260,000。你有26个基本系统,乘以10,000。