MySQL - как использовать VARCHAR в качестве первичного ключа AUTO INCREMENT - PullRequest
7 голосов
/ 11 августа 2010

Я использую VARCHAR в качестве основного ключа. Я хочу автоматически увеличить его (основание 62, строчные / прописные буквы, числа), однако приведенный ниже код завершается ошибкой (по очевидным причинам):

CREATE TABLE IF NOT EXISTS `campaign` (
  `account_id` BIGINT(20) NOT NULL,
  `type` SMALLINT(5)  NOT NULL,
  `id` VARCHAR(16) NOT NULL AUTO_INCREMENT PRIMARY KEY
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

однако, это работает:

CREATE TABLE IF NOT EXISTS `campaign` (
  `account_id` BIGINT(20) NOT NULL,
  `type` SMALLINT(5)  NOT NULL,
  `id` VARCHAR(16) NOT NULL PRIMARY KEY
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

Каков наилучший способ самостоятельно отслеживать увеличение значения id? (Так как auto_increment не работает). Мне нужно сделать другую таблицу, которая содержит текущую итерацию идентификатора? Или есть лучший способ сделать это?

РЕДАКТИРОВАТЬ: Я хочу уточнить, что я знаю, что использование INT является первичным ключом auto_increment является логическим путем. Этот вопрос является ответом на некоторый предыдущий диалог, который я видел. Спасибо

Ответы [ 2 ]

5 голосов
/ 11 августа 2010

Вы должны использовать поле INT
и перевести его в любой формат, который вы хотите в выбранное время

0 голосов
/ 24 августа 2011

пример решения вашей проблемы:

создать файл с уникальным номером, а затем увеличить его с помощью функции.

имя файла может быть префиксом, а двоичное содержимое файла представляет собой число.

когда вам нужен новый идентификатор для reg, вызовите функцию

Пример

    String generateID(string A_PREFIX){
        int id_value = parsetoInt(readFile(A_PREFIX).getLine())
        int return_id_value = id_value++
        return return_id_value
    }

где "A_PREFIX-" - это имя файла, которое вы используете для генерации идентификатора поля.

...