составной (буквенно-цифровой) первичный ключ и автоинкремент - PullRequest
0 голосов
/ 29 июня 2011

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

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

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

спасибо.

Ответы [ 2 ]

0 голосов
/ 29 июня 2011

Я спросил это некоторое время назад.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 голосов
/ 29 июня 2011

Автоинкремент MySQL всегда числовой. Есть несколько подходов, которые вы можете использовать:

  • Реализация собственного приращения в вашем приложении
  • Реализация автоинкремента с алфавитно-цифровой клавишей с помощью триггера
  • Используйте автоинкремент MySQL, а затем приложение преобразует число в алфавитно-цифровое для отображения.
  • Как и выше, но используйте представление для преобразования MySQL. (Это было бы односторонним, так как я не верю, что MySQL поддерживает триггеры вместо;

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

...