2010-08-11 106 views
7

Estoy usando un VARCHAR como mi clave principal. Quiero incremento automático que (de base 62, minúsculas/mayúsculas, números), Sin embargo, el código de abajo falla (por razones obvias): sin embargoMySQL - cómo usar VARCHAR como INCREMENTO AUTOMÁTICO Clave principal

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; 

, esto funciona:

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; 

Lo ¿Es la mejor manera de hacer un seguimiento del incremento de 'id'? (Dado que auto_increment no funciona). ¿Debo hacer otra tabla que contenga la iteración actual de ID? ¿O hay una mejor manera de hacer esto?

EDIT: Quiero aclarar que sé que el uso de INT es una clave primaria de auto_increment es la forma lógica de hacerlo. Esta pregunta es en respuesta a algún diálogo previo que vi. Gracias

+0

Offtopic: ¿Estás seguro de que deseas utilizar MyISAM? Para una base de datos relacional, necesita innoDB en MySQL para crear claves externas. –

+1

No, no estoy seguro en absoluto. He estado usando MySQL desde hace bastante tiempo, sin embargo, me dijeron que MyISAM debería usarse la mayor parte del tiempo y simplemente fui con eso: P –

Respuesta

5

usted tiene que utilizar un campo INT
y traducirlo a cualquier formato que desee en el selecto tiempo

+0

Eso no es posible en mi caso ya que la ID se transmite como parte de la URL –

+0

Además, específicamente estoy buscando la mejor manera de incrementar manualmente la ID. Sé que Bit.ly y posiblemente Tiny URL hacen algo muy similar. –

+0

@Kenny lol todo es posible para el programador :) conviértalo antes de pasar a la consulta. no es un gran trato. Estos acortadores de URL lo hacen como dije. –

0

ejemplo de una solución a su problema:

crear un archivo con un número único y luego incrementar con una función.

el nombre del archivo puede ser el prefijo y el contenido binario del archivo representa un número.

cuando se necesita una nueva identificación para el registro invoque la función

Ejemplo

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

donde "A_PREFIX-" es el nombre del archivo wich se utiliza para generar el identificador para el campo.

Cuestiones relacionadas