【问题标题】:composite (alphanumeric) primary key and auto increment复合(字母数字)主键和自动增量
【发布时间】:2011-09-25 10:37:29
【问题描述】:

是否可以在 MySQL 中创建一个结合了字母元素和数字的自动增量函数?

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

在 SQL 中还是在 SQL 之外(即 php 脚本)管理生成新密钥更好吗?

谢谢。

【问题讨论】:

标签: mysql sql primary-key auto-increment


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    我不久前问过这个问题。不幸的是,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;
        } 
    

    【讨论】:

      猜你喜欢
      • 2012-10-31
      • 1970-01-01
      • 2022-11-15
      • 1970-01-01
      • 1970-01-01
      • 2016-11-11
      • 2012-04-16
      • 1970-01-01
      相关资源
      最近更新 更多