составной (буквенно-цифровой) первичный ключ и автоинкремент

0

Можно ли сделать функцию автоинкремента в MySQL, которая объединяет альфа-элементы и числовые?

У меня есть существующая система с такими ключами, как QAb99, QAb101, QAd9003 и т.д. Максимальная числовая часть варьируется от 1 до 9999, тогда как буквы начинаются с QA и варьируются от QAa до QAd и т.д., и в конечном итоге будут проходить QAd9999 до QAe1 и т.д.

Лучше ли управлять генерации новых ключей в SQL или вне SQL (т.е. php script)?

спасибо.

Теги:
primary-key
auto-increment

2 ответа

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 поддерживает вместо триггеров, см. http://bugs.mysql.com/bug.php?id=16525)

Как вы, вероятно, понимаете, вы можете преобразовать свою последовательность в число и обратно; "a" через "z" составляют от 0 до 250 000; если вы перейдете к двойному, то 260 000. У вас есть система base-26, умноженная на 10 000.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню